cassandra 原因:java.lang.NoSuchMethodError(无此类方法错误):这是一个很好的例子,但是,如果你有一个很好的例子,那么你就可以使用它了,

insrf1ej  于 2022-11-05  发布在  Cassandra
关注(0)|答案(2)|浏览(173)

我正在使用以下依赖项创建一个应用程序,这些依赖项都是到目前为止的最新版本。

<parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.0.0.M5</version>
     </parent>
    `<dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector_2.10</artifactId>
        <version>2.0.5</</version>
     </dependency> 
     <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.3.0</version>
     </dependency>`

我得到这个例外状况

"Caused by: java.lang.NoSuchMethodError: com.datastax.driver.core.TypeCodec.getJavaType()Lcom/google/common/reflect/TypeToken;"

经过一番研究,我发现原因是spark-cassandra-connector_2.10 jar也包含com.datastax.driver类文件,并且它也包含TypeCodeC.class,但这与cassandra-driver-core中的TypeCodeC.class文件不同
到目前为止我有两个解决方案。
1.我使用maven-shade-plugin从jar中排除类文件。然而,这需要很多额外的工作。而且由于某种原因,只有我将项目编译成jar并将此jar作为依赖项添加到我的项目中,它才能工作。我认为这不是一个好的解决方案
1.我直接从jar中删除了/com/datastax/driver文件夹和文件。

zip -d /Users/cicidi/.m2/repository/com/datastax/spark/spark-cassandra-connector_2.10/2.0.5/spark-cassandra-connector_2.10-2.0.5.jar /com/datastax/driver/*

然后你需要把这个jar添加到你的项目中,而不是使用maven。(你可以在你的本地使用maven,但是如果你再次把jar从本地拉出来的话,它就不起作用了。)
我在网上没有找到任何答案。我知道会有一些聪明的家伙解决这个问题。但在此之前,我发布这个答案,以帮助任何人想要立即解决这个问题。

nhhxz33t

nhhxz33t1#

<dependency>
       <groupId>com.datastax.spark</groupId>
       <artifactId>spark-cassandra-connector_2.10</artifactId>
       <version>2.0.0-M1</version>
     </dependency>

没有版本冲突

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

bjg7j2ky2#

根据https://github.com/datastax/spark-cassandra-connector/blob/master/doc/FAQ.md中的问题“为什么Cassandra Java驱动程序嵌入在Spark Cassandra连接器工件中?”。很难同时使用这两个库。但我试图通过在pom中显式指定依赖关系来避免这个问题。
有几点要注意:cassandra-driver-* 必须放在spark-cassandra-connector之前。并且3.1.4可能只在2.0.0-M1上运行良好。

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.1.4</version>
</dependency>
<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-mapping</artifactId>
    <version>3.1.4</version>
</dependency>
<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-extras</artifactId>
    <version>3.1.4</version>
</dependency>
<dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector_2.11</artifactId>
    <version>2.0.0-M1</version>
</dependency>

相关问题