0

我想用我的Java代碼連接DSE 5.0服務器上的Ubuntu(與圖啓用),但得到這個錯誤NoClassDefFoundError的:IO /網狀/處理器/暫停/ IdleStateHandler Datastax DSE 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> 

感謝您的幫助..!

+0

包含在任何這三個文物的有關類別? – hotzst

+0

我覺得'netty-all'包含所有netty文物 –

回答

1

java驅動程序是針對Netty 4.0構建和測試的(請參閱JAVA-1241以獲得4.1支持)。可能會有一些不兼容性阻止它的工作(儘管我在Netty 4.1中看到IdleStateHandler在該路徑中)。

如果您需要在您的項目中使用不同版本的Netty,可以考慮使用驅動程序的分類器,該分類器包含其自己的捆綁版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> 
+0

不是'dse-driver'默認包含netty驅動,那麼可能是什麼原因導致'.NoClassDefFoundError:io/netty/handler/timeout/IdleStateHandler' –

+0

如果你還可以這樣做: - >如果我想使用dse-graph特性,那麼我必須包含'java-dse-graph' +'dse-driver' +'cassandra-driver-core'或者只包含'java -dse-graph' –

+0

通過從dse-driver中排除核心驅動程序依賴項,它不應該拉入netty,因爲這是netty依賴項的來源。 w/r/t java-dse-graph,您可以添加該依賴項,然後直接調用dse-driver依賴項,就像在我的答案中一樣。它不漂亮,但它會工作。 –

相關問題