我使用的是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.<init>(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存在问题。
感谢您的帮助。
答案 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)
您正面临这个问题,因为您没有添加像
这样的jargoogle-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。