【问题标题】:GAE : java.lang.NoClassDefFoundError: com/google/appengine/api/blobstore/BlobstoreServiceFactoryGAE:java.lang.NoClassDefFoundError:com/google/appengine/api/blobstore/BlobstoreServiceFactory
【发布时间】:2014-10-27 13:22:17
【问题描述】:

请帮我解决这个问题。我正在使用 blob 存储来保存图像,它在我的本地环境中运行良好。但是,当我在云中部署相同的代码时,它会抛出异常:java.lang.NoClassDefFoundError: com/google/appengine/api/blobstore/BlobstoreServiceFactory

我使用的是 GAE 1.8.4

【问题讨论】:

    标签: google-app-engine jakarta-ee google-cloud-storage blobstore


    【解决方案1】:

    很可能,您的war/WEB-INF/lib/ 文件夹中缺少appengine-api.jar

    如果您使用 Eclipse,请单击“问题”选项卡。您可能会看到一条警告,指出此 jar 在服务器上不可用。右键单击此警告,选择 QuickFix,选择“复制...”选项。或者手动复制这个jar到这个目录。

    【讨论】:

    • 嗨@Andrei,我正在使用maven。我必须在 pom.xml 文件中提供任何依赖项吗?
    • 刚刚检查了我的 WEB-INF/lib/ 并在那里找到了 appengine-api-1.0-sdk-1.8.4.jar 文件。而且没有任何警告。
    • 除了找到的jar之外,还需要appengine-api.jar。
    【解决方案2】:

    在我的情况下,所需的 jar 位于 WEB-INF/lib 文件夹中,但错误仍在发生...我发现发生此错误是因为 Jetty 9 尚未完成类加载启动过程,而我的一个初始化类需要 BlobstoreService:

    public class InitializeAppContextListener implements ServletContextListener {
    
        private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    

    所以我不得不在上下文完全加载后推迟实例变量初始化,如下所示:

    public class InitializeAppContextListener implements ServletContextListener {
        private BlobstoreService blobstoreService;
    
        public void contextInitialized(ServletContextEvent event) {
            blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    

    然后webapp又可以正常启动了。这种新行为是在我们使用 JDK 1.8 从 servlet-api 2.5 升级到 3.1 之后出现的...

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 2012-04-04
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2011-07-28
      相关资源
      最近更新 更多