NoClassDefFoundError:无法在生产环境中初始化OauthRawGcsServiceFactory

时间:2014-04-18 15:02:29

标签: google-app-engine google-cloud-storage

我使用的是appengine-sdk 1.9.3。

在devserver中,通常在Eclipse和Ant中工作。

当我部署(更新)到appengine(生产环境)时,我收到此错误:

event.getResults(): [<pre>Error for /p7/formPanelServlet
java.lang.NoClassDefFoundError: Could not initialize class
    com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory 
at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:42) 
at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:34)
at com.bitvisio.p7.server.FormPanelServlet.&lt;init&gt;(FormPanelServlet.java:27)

在FormPanelServlet.java:27,代码为:

private final GcsService gcsService = GcsServiceFactory
        .createGcsService(new RetryParams.Builder()
        .initialRetryDelayMillis(10)
        .retryMaxAttempts(10)  
        .totalRetryPeriodMillis(15000)
        .build());

我将lib appengine-gcs-client-0.3.9.jar放在war / WEB-INF / lib中。我认为这个lib存在问题。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

始终使用Maven或Ivy等工具来解决依赖关系。将JAR复制到war/WEB-INF/lib/目录并手动编辑.classpath文件将会非常痛苦,并且可能无法帮助您。如果您使用Eclipse&amp; Google App Engine插件,使用添加Google API ... ,如此处所述 - Google Plugin for Eclipse。就我而言,通过Google Plugin for Eclipse添加 Cloud Storage API 有助于解决此问题NoClassDefFoundError

答案 1 :(得分:1)

我遇到了同样的问题。我使用Ivy来解决依赖关系,并且总是使用latest.integration(使用Maven使用RELEASE)进行修订。

但是我通常会忽略传递库。看起来Google正在扩展API系列 - 至少要拆分离散功能。

现在有很多传递依赖,似乎他们在1.9.3的同时发布了新版本的GCS客户端。

获取所有依赖项并将其打包在我的部署中解决了我的问题。我没有在开发中遇到的问题让它更加混乱。

答案 2 :(得分:1)

您正面临这个问题,因为您没有添加像

这样的jar
  • google-api-services-storage-v1-rev78-1.22.0.jar download link

  • joda-time-2.94.jar download link

  • guava-19.0.jar link to download

    您可以根据appengine-gcs-client jar文件使用不同版本的jar。

    注意:使用项目添加所有这些jar和构建路径,问题将得到解决。 enter image description here