【发布时间】:2014-09-17 20:53:59
【问题描述】:
我在谷歌应用引擎上有一个网络服务,我正在尝试从网络服务中读取来自谷歌云存储的文件。这是我正在使用的代码:
public static byte[] readFile2(String bucket, String filepath) throws IOException {
GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
GcsFilename fileName = new GcsFilename(bucket, filepath);
logger.warning(fileName.toString() + "<br>");
logger.warning(String.format("/gs/%s/%s", fileName.getBucketName(), fileName.getObjectName()));
int fileSize = (int) gcsService.getMetadata(fileName).getLength();
ByteBuffer result = ByteBuffer.allocate(fileSize);
try (GcsInputChannel readChannel = gcsService.openReadChannel(fileName, 0)) {
readChannel.read(result);
}
return result.array();
}
我正在调用它
writer.write(new String(readFile2("myBucket", "my/path/to/file.sql")));
但是,当我尝试运行该服务时,我得到了
java.lang.NoClassDefFoundError: com/google/api/client/extensions/appengine/http/UrlFetchTransport
at com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory.<clinit>(OauthRawGcsServiceFactory.java:29)
at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:42)
at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:34)
at ...........................CloudLookupServlet.readFile2(CloudLookupServlet.java:69) -> first line of readFile2
...
我的战争中有以下罐子:
appengine-api-labs.jar
appengine-api-stubs.jar
appengine-api.jar
appengine-gcs-client-0.3.9.jar
appengine-local-runtime-shared.jar
commons-lang3-3.2.jar
commons-logging-1.1.1.jar
el-api.jar
geronimo-jpa_3.0_spec-1.1.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
google-api-client-1.18.0-rc.jar
google-api-client-appengine-1.18.0-rc.jar
google-api-client-servlet-1.18.0-rc.jar
google-api-services-datastore-protobuf-v1beta2-rev1-2.1.0.jar
google-http-client-1.18.0-rc.jar
google-http-client-appengine-1.18.0-rc.jar
google-http-client-jackson-1.18.0-rc.jar
google-http-client-jackson2-1.18.0-rc.jar
google-http-client-protobuf-1.18.0-rc.jar
google-oauth-client-1.18.0-rc.jar
google-oauth-client-appengine-1.18.0-rc.jar
google-oauth-client-java6-1.18.0-rc.jar
google-oauth-client-jetty-1.18.0-rc.jar
google-oauth-client-servlet-1.18.0-rc.jar
gson-2.1.jar
guava-17.0.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
jackson-core-2.1.3.jar
jackson-core-asl-1.9.11.jar
jcommander-1.32.jar
jdo2-api-2.3-eb.jar
jsp-api.jar
jsr305-2.0.1.jar
protobuf-java-2.5.0.jar
servlet-api.jar
transaction-api-1.1.jar
xpp3-1.1.4c.jar
xstream-1.4.7.jar
我不确定我缺少什么来解决此问题。任何帮助将不胜感激,谢谢。
【问题讨论】:
-
大多数情况下,当您在类路径中有版本不匹配的 jar 时会发生此问题。确保类路径中的所有 jar 都是兼容的。
-
是的,我一直在使用code.google.com/p/google-api-java-client/wiki/… 作为参考,并且我拥有一切。唯一的区别是网站说要使用 jsr305-1.3.9.jar 和 protobuf-java-2.4.1.jar
标签: java google-app-engine servlets noclassdeffounderror google-cloud-storage