1

java.lang.NoSuchMethodError: com.google.common.io.ByteStreams.exhaust(Ljava/io/InputStream;)J

使用Guava - 18.0vCloud Storage - 2.2.2v时出现上述错误消息:

 <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-storage</artifactId>
      <version>2.2.2</version>
 </dependency>
 <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>18.0</version>
 </dependency>
 <dependency>
      <groupId>com.datastax.cassandra</groupId>
      <artifactId>cassandra-driver-core</artifactId>
      <version>3.2.0</version>
 </dependency>

如果我将Guava - 23vDatastax -3.2.0v一起使用,我将收到以下错误消息:

java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureFallback

所以云存储需要 Guava 版本高于 20 ,但 DataStax 需要版本低于 20 ,所以任何一个都可以同时工作,但我想要这两样东西。

我的代码:

 StorageOptions options = StorageOptions.newBuilder()
      .setProjectId(PROJECT_ID)
      .setCredentials(GoogleCredentials
           .fromStream(new FileInputStream(PATH_TO_JSON_KEY))).build();
 Storage storage = options.getService();
 Blob blob = storage.get(BUCKET_NAME, OBJECT_NAME);
 ReadChannel r = blob.reader();
4

2 回答 2

1

尝试使用您提供的代码和依赖项来重现您的错误。

在此处输入图像描述

并且能够通过使用这些版本来解决问题。

<dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-storage</artifactId>
      <version>2.2.2</version>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>20.0</version>
    </dependency>
     <dependency>
      <groupId>com.datastax.cassandra</groupId>
      <artifactId>cassandra-driver-core</artifactId>
      <version>3.11.0</version>
    </dependency>

输出: 在此处输入图像描述

当您使用 Guava 20.0 及更高版本时,还建议使用最新版本的DataStax 。

于 2022-01-13T10:43:34.813 回答
1

3.2.0 似乎是 2017 年以来 Cassandra 驱动程序的一个非常旧的版本——尝试升级到这个主要版本的最新版本3.11.0

看起来驱动程序将包切换到com.datastackx.oss:java-driver-core并移至主要版本 4.x。

于 2022-01-12T19:41:29.990 回答