我正在尝试将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依赖项,并且在'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?这应该给您一个大的提示,指出哪个库可能已过时/不匹配。

10-06 14:35