使用 Google App Engine 的 Eclipse 中的 NoClassDefFoundError HttpTransport
NoClassDefFoundError HttpTransport in Eclipse using Google App Engine
我在一个旧项目上从已弃用的文件 API 切换到新的 Cloud Storage Client Library,似乎存在依赖关系问题。我没能让 Maven 正常工作,所以我手动安装了所需的 jar。我可以编译 运行 我的 servlet,但是当我尝试通过 DriverManager.getConnection():
访问 Cloud SQL 时出现此 运行time 错误
java.lang.NoClassDefFoundError: com/google/api/client/http/HttpTransport
HttpTransport 应该在哪个 jar 中?
如何检查我上传到 Google 的 war 是否包含它?
我的 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
com/google/api/client/http/HttpTransport 是 appengine-tools-api.jar
的一部分
看起来它与 jar 文件、类路径或云存储无关。该应用程序使用旧的云 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 云 sql > 应用引擎 sql instance) 即使在新项目中也会弹出类似的 HttpTransport 错误。这可能是 appengine eclipse 插件或 appengine 1.9.25 中的错误...我怀疑这些错误是旧连接方法的预期行为,是否已弃用。
我在一个旧项目上从已弃用的文件 API 切换到新的 Cloud Storage Client Library,似乎存在依赖关系问题。我没能让 Maven 正常工作,所以我手动安装了所需的 jar。我可以编译 运行 我的 servlet,但是当我尝试通过 DriverManager.getConnection():
访问 Cloud SQL 时出现此 运行time 错误java.lang.NoClassDefFoundError: com/google/api/client/http/HttpTransport
HttpTransport 应该在哪个 jar 中?
如何检查我上传到 Google 的 war 是否包含它?
我的 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
com/google/api/client/http/HttpTransport 是 appengine-tools-api.jar
的一部分看起来它与 jar 文件、类路径或云存储无关。该应用程序使用旧的云 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 云 sql > 应用引擎 sql instance) 即使在新项目中也会弹出类似的 HttpTransport 错误。这可能是 appengine eclipse 插件或 appengine 1.9.25 中的错误...我怀疑这些错误是旧连接方法的预期行为,是否已弃用。