我的实习需要我熟悉 cassandra。我从以下位置下载了 astyanax cassandra:
https://github.com/Netflix/astyanax
通过以下命令从源代码构建 astyanax 后:
git clone [email protected]:Netflix/astyanax.git
cd astyanax
./gradlew 构建
我创建了一个新的 java 项目并从这里复制+粘贴示例代码:
https://github.com/Netflix/astyanax/blob/master/astyanax-examples/src/main/java/com/netflix/astyanax/examples/AstCQLClient.java
现在问题出现了。我确实修复了路径配置,它导入了从 gradlew 构建生成的所有 .jar 文件。但是一行(长)代码用红色短划线突出显示:
context = new AstyanaxContext.Builder()
.forCluster("Test Cluster")
.forKeyspace("test1")
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
)
.withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
.setPort(9160)
.setMaxConnsPerHost(1)
.setSeeds("127.0.0.1:9160")
)
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setCqlVersion("3.0.0")
.setTargetCassandraVersion("1.2"))
.withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
.buildKeyspace(ThriftFamilyFactory.getInstance());
警告信息是:
无法解析 org.apache.cassandra.thrift.Cassandra$Client 类型。它是从所需的 .class 文件间接引用的
我需要专家的帮助。非常感谢!!!
最佳答案
听起来您缺少 thrift 依赖项(thrift jar 文件)。要么是,要么您使用的是不兼容的 thrift 版本。简单的解决方案是使用 Maven 并将 Astyanax 依赖项添加到您的项目中。更复杂的解决方案是验证您导入的 thrift 版本是否与正在使用的 Astyanax 版本兼容。
Maven 依赖项(将此添加到您的 pom 文件中):
<dependency>
<groupId>com.netflix.astyanax</groupId>
<artifactId>astyanax</artifactId>
<version>1.56.42</version>
</dependency>
您可以使用 Astyanax's wiki 为您的 Astyanax 客户端计算出兼容版本的 Thrift。但是知道你是从 Github 构建的项目,你想要与 Cassandra 兼容的最新 thrift,所以你在追求 Thrift 9.0+(例如
libthrift-0.9.0.jar
)。关于cassandra - astyanax cassandra : The type org. apache.cassandra.thrift.Cassandra$Client 无法解析。它是从所需的 .class 文件间接引用的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17823586/