1

我正在尝试使用我的 java 代码连接 ubuntu(启用图形)上的 DSE 5.0 服务器,但出现此错误

Exception in thread "main" java.lang.NoClassDefFoundError: io/netty/handler/timeout/IdleStateHandler
    at com.datastax.driver.core.Connection$Initializer.<init>(Connection.java:1409)
    at com.datastax.driver.core.Connection.initAsync(Connection.java:144)
    at com.datastax.driver.core.Connection$Factory.open(Connection.java:796)
    at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:253)
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:201)
    at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
    at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1473)
    at com.datastax.driver.core.Cluster.init(Cluster.java:159)
    at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:330)
    at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:305)
    at com.datastax.driver.core.Cluster.connect(Cluster.java:247)
    at com.datastax.driver.core.DelegatingCluster.connect(DelegatingCluster.java:71)
    at com.datastax.driver.dse.DseCluster.connect(DseCluster.java:351)

正如错误所说,netty 库可能丢失了。

我在我的 pom.xml 中添加了 netty-all 但也得到了同样的错误。

Pom.xml

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>dse-driver</artifactId>
    <version>1.1.1-beta1</version>
</dependency>
<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>dse-driver</artifactId>
    <version>1.1.1-beta1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.6.Final</version>
</dependency>

感谢帮助..!

4

1 回答 1

1

Java 驱动程序是针对 Netty 4.0 构建和测试的(请参阅JAVA-1241了解 4.1 支持)。可能有一些不兼容导致它无法工作(尽管我在 Netty 4.1 的那个路径中看到了 IdleStateHandler)。

如果您需要在项目中使用不同版本的 Netty,可以考虑使用shaded驱动的分类器,该分类器在自己的包结构下包含自己的捆绑版本的 netty。由于您使用的是 dse 驱动程序,因此您还需要从其依赖项定义中排除核心驱动程序(这在未来会变得不那么复杂):

    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.1.3</version>
        <classifier>shaded</classifier>
        <!-- Because the shaded JAR uses the original POM, you still need
             to exclude this dependency explicitly: -->
        <exclusions>
            <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>dse-driver</artifactId>
        <version>1.1.1-beta1</version>
        <exclusions>
            <exclusion>
                <groupId>com.datastax.cassandra</groupId>
                <artifactId>cassandra-driver-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
于 2017-01-09T16:48:16.713 回答