NoClassDefFoundError: драйвер io/netty/handler/timeout/IdleStateHandler Datastax dse java

Я пытаюсь подключиться к серверу DSE 5.0 на Ubuntu (с включенным графиком) с помощью своего кода 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, вероятно, отсутствует.

Я добавил netty-all в свой pom.xml, но также получил ту же ошибку.

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>

Спасибо за помощь..!


person Prakash Pandey    schedule 08.01.2017    source источник
comment
Содержится ли рассматриваемый класс в каком-либо из этих трех артефактов?   -  person hotzst    schedule 08.01.2017
comment
Я думаю, что netty-all содержит все сетевые артефакты   -  person Prakash Pandey    schedule 09.01.2017


Ответы (1)


Драйвер Java создан и протестирован на Netty 4.0 (см. JAVA-1241 для 4.1 поддержку). Возможно, есть некоторая несовместимость, которая мешает этому работать (хотя я вижу IdleStateHandler на этом пути в Netty 4.1).

Если вам нужно использовать другую версию 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>
person Andy Tolbert    schedule 09.01.2017
comment
dse-driver не содержит драйвер netty по умолчанию, что может быть возможной причиной .NoClassDefFoundError: io/netty/handler/timeout/IdleStateHandler - person Prakash Pandey; 10.01.2017
comment
Если бы вы могли также это: -> Если я хочу использовать функцию dse-graph, какие библиотеки мне нужно будет включить java-dse-graph + dse-driver + cassandra-driver-core или только java-dse-graph - person Prakash Pandey; 10.01.2017
comment
Исключая зависимость основного драйвера от dse-драйвера, он также не должен использовать netty, поскольку именно отсюда возникает зависимость netty. w/r/t java-dse-graph, вы можете добавить эту зависимость, а затем напрямую вызвать зависимость dse-драйвера, как в моем ответе. Это не красиво, но это сработает. - person Andy Tolbert; 10.01.2017