【发布时间】:2016-08-19 13:59:32
【问题描述】:
我看到以下错误:
java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureFallback
当cluster.connect() 被调用时:
String hosts = CassandraClientUtil.getHost();
String localDC = CassandraClientUtil.getLocalDC();
Cluster cluster = null;
if (StringUtils.isNotEmpty(localDC))
{
cluster = Cluster.builder().addContactPoints(hosts.split(","))
.withCredentials(CassandraCopsComponentLogger.USER_NAME, CassandraCopsComponentLogger.AUTH_CODE)
.withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_ONE))
.withLoadBalancingPolicy(new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(localDC).build())).build();
}
else
{
cluster = Cluster.builder().addContactPoints(hosts.split(","))
.withCredentials(CassandraCopsComponentLogger.USER_NAME, CassandraCopsComponentLogger.AUTH_CODE)
.withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_ONE)).build();
}
Session session = cluster.connect();
CassandraCopsComponentLogger.mappingManager = new MappingManager(session);
pom.xml 有以下依赖:
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>16.0.1</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
<version>3.9.0.Final</version>
</dependency>
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
我在stackoverflow上看到了一个帖子here 他们建议将番石榴版本升级到 16.0.1 但这并没有帮助我解决我的问题。由于我是 cassandra 的新手,因此这里的一些指示会非常有帮助。为了添加更多背景,这个东西作为一个独立的项目工作,当我将此项目作为 maven 依赖项包含到其他项目时,它会引发这个运行时错误。
【问题讨论】:
-
FutureFallback 已在 Guava 14 中引入,因此我怀疑您指定的版本(16.0.1)没有被考虑在内,而是使用了一些非常旧的版本;您可以运行“mvn dependency:resolve”并检查正在为您的构建解析的 Guava 的实际版本吗?
-
@adutra 并在 Guava 19 中弃用,然后在 Guava 20 中删除:google.github.io/guava/releases/19.0/api/docs/com/google/common/…
-
确实如此,我们已经意识到并正在努力替换它:datastax-oss.atlassian.net/browse/JAVA-1328。目前,驱动程序无法使用 Guava 20。