我正在使用以下依赖项创建一个应用程序,这些依赖项都是到目前为止的最新版本。
<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从本地拉出来的话,它就不起作用了。)
我在网上没有找到任何答案。我知道会有一些聪明的家伙解决这个问题。但在此之前,我发布这个答案,以帮助任何人想要立即解决这个问题。
2条答案
按热度按时间nhhxz33t1#
没有版本冲突
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上运行良好。