我看到以下错误:
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依赖项包含到其他项目时,它会引发这个运行时错误。
答案 0 :(得分:15)
com.google.common.util.concurrent.FutureFallback
在Guava 19.0中已弃用,自Guava 20.0以来已被删除。
在升级Cassandra驱动程序之前,请使用Guava 19.0并且不要使用Guava 20.0或更高版本。
答案 1 :(得分:3)
我将Cassandra驱动程序版本更新为最新版本,它应该可以解决问题。
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.5.0</version>
</dependency>
答案 2 :(得分:1)
不要添加外部番石榴版本。无论使用datastax-cassandra-core,你都可以使用该版本。否则不需要那个。
答案 3 :(得分:0)
如果像我这样的人不知道,那里有一个新版本(4.x),具有新的和不同的组ID,请查看quickstart。这个新版本仍然使用番石榴,但已着色。
驱动程序现在需要Java8。它不再依赖于Guava(我们仍在内部使用它,但已对其进行了阴影处理)。
更多信息可以在upgrade guide中找到。