【问题标题】:NoClassDefFoundError in GAE with EclipseEclipse 中的 GAE 中的 NoClassDefFoundError
【发布时间】:2017-04-04 17:50:30
【问题描述】:

我正在尝试将在 Google 应用引擎中运行的应用从使用 BlobstoreService 接口迁移到较新的云存储,但没有成功。

为了让事情变得更简单,我从头开始尝试运行 Google 提供的示例之一 (GitHub)。我正在使用 Eclipse 4.6、Google Cloud SDK149.0.0 和 1.9.50 的 app-engine java 版本。尽管在本地环境中不起作用(我预料到),但代码编译得完美无缺。但是,当在 GAE 中部署时,它在运行时会失败并出现 NoClassDefFoundError:

servlet 未捕获的异常 java.lang.NoClassDefFoundError: com/google/api/services/storage/Storage$Builder 在 com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsService.(OauthRawGcsService.java:175) 在 com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory.createOauthRawGcsService(OauthRawGcsServiceFactory.java:41) 在 com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:59) 在 com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:44) 在 com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:40) 在 com.clopez.storage.NewUpload.doPost(NewUpload.java:53)

我的代码(实际上是 Google 自己的代码)在以下位置失败:

GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());

正如我在其他几篇 Stackoverflow 帖子中所读到的,这通常是由于我的 WEB-INF/lib 目录中不存在 jar,因此我在其中包含了 appengine-api-1.0-sdk-1.9.50.jar, appengine-gcs-client-0.6、com.google.guava_20.0.0、joda-time-2.9.9 以及最新 Google Java Client API 中的所有 jar。部署后我的 WEB-INF 目录如下:

Stackoverflow doesn't allow me to show pictures here, so here's the link

但是这一直失败,我很惊讶。我不知道如何继续前进。

【问题讨论】:

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


【解决方案1】:

我没有使用 Maven,所以我需要手动将所有需要的 jar 包含到 WEB-INF/lib 中。即使我复制了 google-api-services-storage-v1-rev104-java-1.22.0.zip 包中的所有库,我也忘记包含主要库(不在该包中的 libs 目录下)。简而言之,将 google-api-services-storage-v1-rev104-1.22.0.jar 放到 Eclipse 的 WEB-INF/lib 目录中就可以了。非常感谢。

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 2014-03-20
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多