web-dev-qa-db-fra.com

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

Je vois l'erreur suivante:

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

quand la cluster.connect() est appelée:

            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);

Le pom.xml a les dépendances suivantes: 

<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>

J'ai vu un article sur stackoverflow ici Où ils ont recommandé de mettre à niveau la version de goyave vers 16.0.1 mais cela ne m'a pas aidé à résoudre mon problème. Certaines directions d'ici seront très utiles car je suis novice en cassandra. Pour ajouter plus de fond, cette chose fonctionne comme un projet autonome. Lorsque j'inclus ce projet en tant que dépendance maven à un autre projet, il génère cette erreur d'exécution.

15
Prasad Shinde

com.google.common.util.concurrent.FutureFallback est obsolète dans Guava 19.0 et supprimé depuis Guava 20.0.

Utilisez Guava 19.0 et n’utilisez pas Guava 20.0 ou une version ultérieure avant de mettre à niveau le pilote Cassandra.

14
Hendy Irawan

J'ai mis à jour la version du pilote Cassandra vers la dernière version disponible et elle devrait résoudre le problème.

<dependency>
   <groupId>com.datastax.cassandra</groupId>
   <artifactId>cassandra-driver-core</artifactId>
   <version>3.5.0</version>
</dependency>
3
gmanolache

N'ajoutez pas de version externe de goyave. quelle que soit la datastax-cassandra-core en utilisant seulement vous pouvez mettre cette version. sinon pas besoin de ça.

1
mahendra singh

Si quelqu'un comme moi ne savait pas qu'il existe une nouvelle version (4.x) avec un nouvel identifiant de groupe, consultez le quickstart . Cette nouvelle version utilise toujours Guava mais elle est ombrée.

Le pilote nécessite maintenant Java 8. Il ne dépend plus de Guava (nous l’utilisons toujours en interne mais il est ombré).

Vous trouverez plus d'informations dans le guide de mise à niveau .

0
aemaem