NoClassDefFoundError:io / netty / handler / timeout / IdleStateHandler Datastax dse java driver

时间:2017-01-08 20:03:46

标签: java datastax datastax-enterprise datastax-java-driver datastax-enterprise-graph

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

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>

感谢您的帮助..!

1 个答案:

答案 0 :(得分:1)

java驱动程序是针对Netty 4.0构建和测试的(有关4.1支持,请参阅JAVA-1241)。可能有一些不兼容性阻止它工作(虽然我在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>