appspot上的GAE +云存储+ Guava = NoSuchMethodError?

时间:2017-07-05 20:35:48

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

将我的GAE应用程序部署到appspot后,我不断从API请求中收到以下错误:NoSuchMethodError: com.google.common.hash.Hashing.crc32c()Lcom/google/common/hash/HashFunction;

我在本地运行时没有遇到任何错误。调用时会抛出错误:com.google.cloud.storage.StorageOptions.getDefaultInstance().getService().create

我已经尝试过Guava版本18-20并且正在运行具有以下依赖项的Java 7:

dependencies {
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.53'
    compile 'com.google.appengine:appengine-endpoints:1.9.53'
    compile 'com.google.appengine:appengine-endpoints-deps:1.9.53'
    compile 'com.google.appengine.tools:appengine-gcs-client:0.6'
    compile 'com.google.api-client:google-api-client:1.22.0'
    compile 'com.google.guava:guava:20.0'
    compile 'com.google.cloud:google-cloud-storage:1.0.1'
    compile 'com.googlecode.objectify:objectify:5.1.1'
    compile 'javax.servlet:servlet-api:2.5'
    compile 'org.jsoup:jsoup:1.10.2'
}

感谢您的帮助!!

1 个答案:

答案 0 :(得分:1)

我最终想到了......

我使用的是Google云存储库(com.google.appengine.tools:appengine-gcs-client:0.6),该库使用guava-jdk5库,这与我正在使用的Guava版本相冲突;在Guava的jdk5版本中不存在HashFunction。

解决方案是从Google云端存储库导入中排除guava-jdk5。我的.gradle文件的相关部分如下所示:

compile 'com.google.guava:guava:19.0'
compile ('com.google.appengine.tools:appengine-gcs-client:0.6')  {
    exclude group: 'com.google.guava', module: 'guava-jdk5'
}

对于其他人来说,冲突可能是由不同的库创建的,因此请务必检查库的依赖关系,看看是否与您尝试使用的Guava版本存在冲突。