2

DataStax Java Driverを使用してJavaからCassandraに接続しようとすると、このエラーが発生します。私はSOに関するいくつかの答えを読んだ。 Here Guava 19.0にはcom.google.common.util.concurrent.FutureFallback is deprecatedが、Guava 20.0には削除されています。したがって、Guava 20.0以降は使用しないでください。クラスが見つかりません。com/google/common/util/concurrent/FutureFallback

さらに、Guava 20.0を必要とするPmml-Evaluatorを使用しています。このコードを削除しても、私のコードは正常に動作します。では、どうすればこの問題を解決できますか?

のpom.xmlの依存関係:

<dependencies> 

    <dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-model</artifactId> 
     <version>1.3.4</version> 
    </dependency> 

    <dependency> 
     <groupId>com.beust</groupId> 
     <artifactId>jcommander</artifactId> 
     <version>1.48</version> 
     </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-evaluator</artifactId> 
     <version>1.3.4</version> 
     </dependency> 

    <dependency> 
     <groupId>io.grpc</groupId> 
     <artifactId>grpc-netty</artifactId> 
     <version>1.1.2</version> 
    </dependency> 

    <dependency> 
    <groupId>io.grpc</groupId> 
    <artifactId>grpc-protobuf</artifactId> 
    <version>1.1.2</version> 
    </dependency> 

    <dependency> 
    <groupId>io.grpc</groupId> 
    <artifactId>grpc-stub</artifactId> 
    <version>1.1.2</version> 
    </dependency> 

    <dependency> 
    <groupId>io.netty</groupId> 
    <artifactId>netty-handler</artifactId> 
    <version>4.1.8.Final</version> 
</dependency> 

    <dependency> 
     <groupId>com.datastax.cassandra</groupId> 
     <artifactId>cassandra-driver-core</artifactId> 
     <version>3.1.4</version> 
    </dependency> 

    </dependencies> 

クラス:

package com.cw.predictive; 

import com.datastax.driver.core.Session; 
import com.datastax.driver.core.Cluster; 

public class CassandraSession { 

    private static Session session; 

    private CassandraSession(){} 

    public static Session getCassandraSessionInstance(String[] CONTACT_POINTS, int PORT){ 

     if(session == null){      
      synchronized (Session.class) { 
       if(session == null){     
        try{           
         Cluster cluster = Cluster.builder() 
         .addContactPoints(CONTACT_POINTS).withPort(PORT) 
         .build();            
         session = cluster.connect(); 
        } 
        catch(Exception ex) { 
         System.out.println("Error occurred"); 
         return null;    
        }    
       }    
      }   
     }  
     return session; 
    } 
} 

エラー:

Exception in thread "grpc-default-executor-0" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureFallback 
     at com.cw.predictive.CassandraSession.getCassandraSessionInstance(CassandraSession.java:18) 
     at com.cw.predictive.PredictiveScore$LeadScoreImpl.getLeadScore(PredictiveScore.java:136) 
     at com.cw.predicitivegrpc.LeadScoreGrpc$MethodHandlers.invoke(LeadScoreGrpc.java:234) 
     at io.grpc.stub.ServerCalls$1$1.onHalfClose(ServerCalls.java:148) 
     at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:263) 
     at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$2.runInContext(ServerImpl.java:586) 
     at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:52) 
     at io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:152) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
    Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.FutureFallback 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 11 more 

答えて

9

あなたが持っているとencounte red、Apache CassandraのDataStax Java DriverはまだGuava 20と21をサポートしていません(JAVA-1328参照)。

ただし、Guava 16.01,17.0,18.0,19.0,20.0、および21.0でテストされたworking PRがあり、この修正のためにバージョン3.2.0を対象としています。私はちょうどあなたが共有PMML-評価者からのpom.xmlが[14.0, 20.0]のサポートされるバージョンの範囲を示していることに気づい

:あなたは何ができるか

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>[14.0, 20.0]</version> 
</dependency> 

はすなわち、org.jpmmlで依存関係としてグアバを除外しています。

<dependency> 
    <groupId>org.jpmml</groupId> 
    <artifactId>pmml-evaluator</artifactId> 
    <version>1.3.4</version> 
    <exclusions> 
    <exclusion> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

これは代わりにJavaドライバの推移的依存性を介して引っ張られることになるPMML-評価およびグアバ16.01の依存関係を解決した結果に引っ張られるからグアバ20.0を防ぐべきです。

+0

java-driver 3.2.0がリリースされました。これは現在guava 16.01から22.0をサポートしています。 –

+0

errは、guava 21.0が22.0が存在しないためサポートされている最大バージョンです –

関連する問題