java - java.lang.ClassNotFoundException:org.spark_project.guava.collect.MapMaker
问题描述
我正在尝试将 apache spark 与 spring-boot cassandra 项目集成。但是在运行项目时会出现以下错误:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/spark_project/guava/collect/MapMaker] with root cause
java.lang.ClassNotFoundException: org.spark_project.guava.collect.MapMaker
我检查了我的 maven 依赖项,并且 mapmaker 文件存在于“org/spark_project/guava/collect/”内的 spark-network-common_2.11.jar 中。这是我正在使用的 pom 文件依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.datastax.cassandra/cassandra-driver-core -->
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-network-common -->
<!-- <dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-network-common_2.10</artifactId>
<version>1.3.0</version>
</dependency> -->
<!-- <dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-network-common_2.11</artifactId>
<version>2.2.1</version>
</dependency> -->
<!-- https://mvnrepository.com/artifact/com.datastax.cassandra/cassandra-driver-mapping -->
<!-- <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-mapping</artifactId>
<version>3.5.0</version> </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.datastax.spark/spark-cassandra-connector -->
<dependency>
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector_2.11</artifactId>
<version>2.0.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spark-network-common_2.11.jar 附带了 spark-core 依赖项,我仍然尝试单独添加它,但即使这样也没有用。spring-boot 在运行时无法识别 mapmaker 文件可能是什么问题?任何帮助表示赞赏。
解决方案
“org.spark_project.guava.collect.MapMaker”的包路径严重暗示了guava包已被重新定位到spark_project以避免依赖地狱。
像这样的事情是由构建过程控制的,并且很容易被忽视库之间不兼容的来源。
我的直觉是,您可能正在使用不匹配的库版本,虽然在技术上可能是兼容的,但这并不是因为番石榴的重定位方式不同。
你有
<artifactId>spark-network-common_2.10</artifactId>
当其他依赖项列出 2.11 时,注释掉。
这些代表使用的 Scala 语言+运行时的版本号,并且应该在使用 Scala 的任何项目中匹配。
哪个类/库正在尝试加载重新定位的 Guava?这应该会给您一个很大的提示,即哪个库可能已过时/不匹配。
推荐阅读
- python - 预处理文本并排除表单脚注、额外空格和
- node.js - Linux 上的 Node 认为它已经过时了
- excel - VBA在初始化时未将单元格值读入文本框
- c - 函数指针变量函数调用触发另一个函数。可能在 C 中
- pandas - 如何从列中删除部分文本?
- arrays - 如何调用结构内的属性?迅速
- java - 如何配置 SpringSecurity oAuth2 和 Basic
- javascript - JavaScript Google Chart 无效行 #1
- apache-spark - Spark Structured Streaming - kafka 偏移处理
- c# - 每页堆栈列的 For 循环