【问题标题】:NoClassDefFoundError HttpTransport in Eclipse using Google App EngineEclipse 中的 NoClassDefFoundError HttpTransport 使用 Google App Engine
【发布时间】:2015-08-22 04:46:20
【问题描述】:

我正在一个旧项目上从已弃用的文件 API 切换到新的云存储客户端库,并且似乎存在依赖关系问题。我没有让 Maven 工作,所以我手动安装了所需的 jar。我可以编译并运行我的 servlet,但是当我尝试通过 DriverManager.getConnection() 访问 Cloud SQL 时出现此运行时错误:

java.lang.NoClassDefFoundError: com/google/api/client/http/HttpTransport

HttpTransport 应该放在什么 jar 中?

如何检查我上传到谷歌的战争是否包含它?

我的 war/WEB-INF/lib 和我的 Java 构建路径库中都有所有这些:

From App Engine SDK:
    appengine-api-1.0-sdk-1.9.25.jar
    appengine-api-labs.jar
    appengine-api.jar
    appengine-endpoints-deps.jar
    appengine-endpoints.jar
    appengine-jsr107cache-1.9.25.jar
    appengine-jsr107cache.jar
    datanucleus-appengine-1.0.10.final.jar
    datanucleus-core-1.1.5.jar
    datanucleus-jpa-1.1.5.jar
    geronimo-jpa_3.0_spec-1.1.1.jar
    geronimo-jta_1.1_spec-1.1.1.jar
    jdo2-api-2.3-eb.jar
    jsr107cache-1.1.jar

The Cloud Storage Client Library:
    appengine-gcs-client-0.4.4.jar

Dependencies of the Cloud Storage Client Library:
    guava-18.0.jar
    joda-time-2.8.2.jar
    google-api-services-storage-v1beta2-rev77-1.20.0.jar

For good measure, every jar from the Cloud Storage API libs:
    commons-logging-1.1.1.jar
    google-api-client-1.20.0.jar
    google-api-client-1.20.0.jar.properties
    google-api-client-android-1.20.0.jar
    google-api-client-android-1.20.0.jar.properties
    google-api-client-appengine-1.20.0.jar
    google-api-client-gson-1.20.0.jar
    google-api-client-jackson2-1.20.0.jar
    google-api-client-java6-1.20.0.jar
    google-api-client-servlet-1.20.0.jar
    google-http-client-1.20.0.jar
    google-http-client-1.20.0.jar.properties
    google-http-client-android-1.20.0.jar
    google-http-client-android-1.20.0.jar.properties
    google-http-client-appengine-1.20.0.jar
    google-http-client-gson-1.20.0.jar
    google-http-client-gson-1.20.0.jar.properties
    google-http-client-jackson2-1.20.0.jar
    google-http-client-jackson2-1.20.0.jar.properties
    google-http-client-jdo-1.20.0.jar
    google-http-client-jdo-1.20.0.jar.properties
    google-oauth-client-1.20.0.jar
    google-oauth-client-1.20.0.jar.properties
    google-oauth-client-appengine-1.20.0.jar
    google-oauth-client-java6-1.20.0.jar
    google-oauth-client-jetty-1.20.0.jar
    google-oauth-client-servlet-1.20.0.jar
    gson-2.1.jar
    gson-2.1.jar.properties
    httpclient-4.0.1.jar
    httpcore-4.0.1.jar
    jackson-core-2.1.3.jar
    jackson-core-2.1.3.jar.properties
    jdo2-api-2.3-eb.jar
    jetty-6.1.26.jar
    jetty-util-6.1.26.jar
    jsr305-1.3.9.jar
    transaction-api-1.1.jar

【问题讨论】:

  • 也许这个启动警告是一个线索(注意两个版本号相同):服务器不再支持此SDK中的API版本! ------------ 最新 SDK: 发布: 1.9.25 时间戳: Tue Jul 07 12:10:33 PDT 2015 API 版本: [1] ----------- 您的 SDK : 发布: 1.9.25 时间戳: Thu Jul 23 12:07:39 PDT 2015 API 版本: [1.0]
  • 当 google 插件构建并上传 war 时,它会回显它使用的临时目录的名称,因此我可以验证这些 jar 是否确实包含在内。对我来说是:C:\Users\USERNAME\AppData\Local\Temp\appcfg312535284579766874.tmp

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


【解决方案1】:

com/google/api/client/http/HttpTransport 是 appengine-tools-api.jar 的一部分

【讨论】:

  • 从 mvnrepository.com 添加 appengine-tools-sdk-1.9.25.jar 并没有修复它。 HttpTransport 似乎也在 google-http-client、appengine-api 和 appengine-endpoints 中,所以我已经包含了 3 次。我想这是一个类路径问题。
【解决方案2】:

看起来它与 jar 文件、类路径或云存储无关。该应用程序使用旧的 Cloud SQL rdbms 连接方法,我不知道该方法已被弃用:

DriverManager.registerDriver(new AppEngineDriver());
Connection conn = DriverManager.getConnection("jdbc:google:rdbms://incredipede:instance/incredipede");

我收集到对 registerDriver 的调用失败,因此当我调用 getConnection() 时所需的类不可用。切换到新的 mysql 连接和 Class.forName() 方法有效:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:google:mysql://incredipede:instance/incredipede?user=root");

Also must add this to appengine-web.xml:
<use-google-connector-j>true</use-google-connector-j>

顺便说一句,我注意到在 Eclipse 中输入应用程序引擎实例名称(项目 > 属性 > google > 应用程序引擎 > google cloud sql > 应用程序引擎 sql 实例)即使在新项目中也会弹出类似的 HttpTransport 错误。这可能是 appengine eclipse 插件或 appengine 1.9.25 中的错误...我怀疑这些错误是旧连接方法的预期行为,是否已弃用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2012-04-26
    • 2011-04-12
    • 2018-01-03
    相关资源
    最近更新 更多