0

Je suis en train de se connecter au serveur DSE 5.0 sur ubuntu (avec graphique activé) avec mon code java mais eu cette erreurNoClassDefFoundError: io/Netty/gestionnaire/délai d'attente/IdleStateHandler DataStax dse java pilote

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) 

Comme l'erreur indique la bibliothèque netty est probablement manquant. J'ai ajouté netty-all dans mon fichier pom.xml mais j'ai aussi eu la même erreur.

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> 

Merci pour l'aide ..!

+0

est la classe en question dans l'un de ces trois objets ? – hotzst

+0

Je pense que 'netty-all' contient tous les artefacts netty –

Répondre

1

Le pilote java est construit et testé par rapport à Netty 4.0 (voir JAVA-1241 pour le support 4.1). Il est possible qu'il y ait une incompatibilité qui empêche cela de fonctionner (bien que je vois IdleStateHandler dans ce chemin dans Netty 4.1). Si vous devez utiliser une version différente de Netty dans votre projet, vous pouvez utiliser le classificateur shaded du pilote qui inclut sa propre version groupée de netty dans sa propre structure de package. Puisque vous utilisez le pilote dse vous aurez également besoin d'exclure le pilote de base de sa définition de dépendance (à l'avenir sera moins compliqué):

<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

n'est pas' dse-driver' contient le pilote netty par défaut, alors quelle peut être la cause possible de '.NoClassDefFoundError: io/netty/handler/timeout/IdleStateHandler' –

+0

Si vous voulez aussi: -> Si je veux utiliser la fonction dse-graph, quelles bibliothèques je devrai inclure 'java-dse-graph' +' dse-driver' + 'cassandra-driver-core' ou seulement' java -dse-graph' –

+0

En excluant la dépendance du pilote principal du pilote dse, il ne devrait pas tirer nety aussi puisque c'est de là que provient la dépendance netty. w/r/t java-dse-graphe, vous pouvez ajouter cette dépendance, puis appelez la dépendance dse-driver directement comme dans ma réponse. Ce n'est pas joli mais ça va marcher. –