1

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>

手伝ってくれてありがとう..!

4

1 に答える 1

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>
于 2017-01-09T16:48:16.713 に答える