Google GCS Client Library の GcsFileOptions で java.lang.NoSuchMethodError


GAE/Java + Slim3 において、

[code]

    new GcsFileOptions.Builder()
    .mimeType(mimeType).acl("bucket-owner-full-control")
    .build();
    
[/code]

を実行した際に `java.lang.NoSuchMethodError`
が発生してしまいます。昨日デプロイしたプロジェクトのみで発生しており、その他の同処理を含んだプロジェクトでは発生しております。

原因ご存じの方いましたら対策ご教授下さい。

以下ログ：

[code]

    java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createUnstarted()Lcom/google/common/base/Stopwatch;
        at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156)
        at com.google.appengine.tools.cloudstorage.GcsServiceImpl.createOrReplace(GcsServiceImpl.java:70)
        at com.cresco.apps.report.service.GoogleCloudStorageService.getNewFile(GoogleCloudStorageService.java:56)
        at com.cresco.apps.report.service.GoogleCloudStorageService.doFileItemUpload(GoogleCloudStorageService.java:84)
        at com.cresco.apps.report.controller.maintenance.ImportController.doPost(ImportController.java:229)
        at com.cresco.apps.report.controller.maintenance.ImportController.run(ImportController.java:127)
        at org.slim3.controller.Controller.runBare(Controller.java:111)
        at org.slim3.controller.FrontController.processController(FrontController.java:491)
        at org.slim3.controller.FrontController.doFilter(FrontController.java:277)
        at org.slim3.controller.FrontController.doFilter(FrontController.java:237)
        at org.slim3.controller.FrontController.doFilter(FrontController.java:199)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at org.slim3.datastore.DatastoreFilter.doFilter(DatastoreFilter.java:55)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at org.slim3.controller.HotReloadingFilter.doFilter(HotReloadingFilter.java:192)
        at org.slim3.controller.HotReloadingFilter.doFilter(HotReloadingFilter.java:157)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
        at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:254)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:326)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
        at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
        at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
        at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:484)
        at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:438)
        at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445)
        at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
        at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309)
        at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301)
        at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442)
        at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
        at java.lang.Thread.run(Thread.java:724)
    
[/code]



[code]

    java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createUnstarted()Lcom/google/common/base/Stopwatch;
        at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156)
    
[/code]

トレースを見る限り、 `Stopwatch` クラスは見つかるが、 `createUnstarted()` メソッドが見つからないという状態です。 [API
ドキュメント](http://docs.guava-
libraries.googlecode.com/git/javadoc/com/google/common/base/Stopwatch.html#createUnstarted\(\))では、これは
Guava バージョン 15 から追加されたメソッドということですから、クラスパスのどこかに、 Guava < 15 を含む jar
が存在しているのではないでしょうか？デプロイ先、または pom.xml
や、IDEプロジェクト設定のクラスパスに古いものがないか見なおしてみるといいかもしれません。

（緊急には、 ClassLoader の読込優先度が高い場所に guava => 15 を置くというのがありますが、場当たり的なのでお勧めできません。）



[code]

    java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createUnstarted()Lcom/google/common/base/Stopwatch;
        at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156)
    
[/code]

トレースを見る限り、 `Stopwatch` クラスは見つかるが、 `createUnstarted()` メソッドが見つからないという状態です。 [API
ドキュメント](http://docs.guava-
libraries.googlecode.com/git/javadoc/com/google/common/base/Stopwatch.html#createUnstarted\(\))では、これは
Guava バージョン 15 から追加されたメソッドということですから、クラスパスのどこかに、 Guava < 15 を含む jar
が存在しているのではないでしょうか？デプロイ先、または pom.xml
や、IDEプロジェクト設定のクラスパスに古いものがないか見なおしてみるといいかもしれません。

（緊急には、 ClassLoader の読込優先度が高い場所に guava => 15 を置くというのがありますが、場当たり的なのでお勧めできません。）

