2016-04-25 6 views
9

Ich sehe den folgenden Fehler:java.lang.NoClassDefFoundError: com/google/common/util/mitlaufende/FutureFallback

java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureFallback 

wenn die cluster.connect() genannt wird:

  String hosts = CassandraClientUtil.getHost(); 
      String localDC = CassandraClientUtil.getLocalDC(); 
      Cluster cluster = null; 
      if (StringUtils.isNotEmpty(localDC)) 
      { 
       cluster = Cluster.builder().addContactPoints(hosts.split(",")) 
         .withCredentials(CassandraCopsComponentLogger.USER_NAME, CassandraCopsComponentLogger.AUTH_CODE) 
         .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_ONE)) 
         .withLoadBalancingPolicy(new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(localDC).build())).build(); 
      } 
      else 
      { 
       cluster = Cluster.builder().addContactPoints(hosts.split(",")) 
         .withCredentials(CassandraCopsComponentLogger.USER_NAME, CassandraCopsComponentLogger.AUTH_CODE) 
         .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_ONE)).build(); 
      } 

      Session session = cluster.connect(); 
      CassandraCopsComponentLogger.mappingManager = new MappingManager(session); 

Der pom .xml hat die folgenden Abhängigkeiten:

<dependencies> 
     <dependency> 
       <groupId>com.google.guava</groupId> 
       <artifactId>guava</artifactId> 
       <version>16.0.1</version> 
     </dependency> 
     <dependency> 
      <groupId>com.datastax.cassandra</groupId> 
      <artifactId>cassandra-driver-core</artifactId> 
      <version>2.1.9</version> 
     </dependency> 
     <dependency> 
      <groupId>io.netty</groupId> 
      <artifactId>netty</artifactId> 
      <version>3.9.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>com.codahale.metrics</groupId> 
      <artifactId>metrics-core</artifactId> 
      <version>3.0.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.5</version> 
     </dependency> 
     <dependency> 
      <groupId>com.datastax.cassandra</groupId> 
      <artifactId>cassandra-driver-mapping</artifactId> 
      <version>2.1.9</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.code.gson</groupId> 
      <artifactId>gson</artifactId> 
      <version>2.3.1</version> 
     </dependency> 
    </dependencies> 

ich einen Beitrag auf Stackoverflow sah here wo sie empfohlen, die Guava-Version auf 16.0.1 zu aktualisieren, aber das half mir nicht, mein Problem zu lösen. Einige Richtungen von hier werden wirklich hilfreich sein, da ich neu in Cassandra bin. Um mehr Hintergrund hinzuzufügen, funktioniert dieses Ding als ein eigenständiges Projekt, wenn ich dieses Projekt als eine Maven Abhängigkeit zu irgendeinem anderen Projekt einschließe, wirft es diesen Laufzeitfehler auf.

+1

FutureFallback wurde in Guava 14 eingeführt, daher vermute ich, dass die von Ihnen angegebene Version (16.0.1) nicht berücksichtigt wird und stattdessen eine sehr alte Version verwendet wird; Kannst du "mvn dependency: resolve" ausführen und die aktuelle Version von Guava überprüfen, die für deinen Build aufgelöst wird? – adutra

+1

@adutra Und veraltet in Guava 19, dann ** entfernt ** in Guava 20: https://google.github.io/guava/releases/19.0/api/docs/com/google/common/util/concurrent/FutureFallback .html –

+1

Das stimmt, wir sind uns dessen bewusst und arbeiten daran, es zu ersetzen: https://datastax-oss.atlassian.net/browse/JAVA-1328. Momentan kann der Fahrer nicht mit Guava 20 arbeiten. – adutra

Antwort

1

Keine externe Guava-Version hinzufügen. was auch immer datastax-cassandra-core mit nur du kannst diese Version setzen. sonst brauche ich das nicht.