You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven构建Apache Spark项目运行时报NoClassDefFoundError:SparkConf如何解决

错误原因

你遇到的NoClassDefFoundError是因为默认执行mvn package生成的jar包仅包含你自己编写的项目代码,不会把pom.xml中声明的Spark等第三方依赖打包进去,运行时JVM无法找到Spark相关的类。


解决方法

方法1:打包成包含所有依赖的fat jar(本地独立运行)

在pom.xml中添加maven-assembly-plugin插件配置,打包时会把所有依赖合并到同一个jar包里:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.6.0</version>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <!-- 可选:指定主类,之后可以直接用java -jar运行不用写主类路径 -->
        <archive>
          <manifest>
            <mainClass>com.mycompany.app.App</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

配置完成后重新执行mvn package,target目录下会生成后缀为jar-with-dependencies.jar的文件,运行命令改为:

java -cp target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar com.mycompany.app.App
# 如果你配置了主类,也可以直接运行:
# java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar

方法2:提交到Spark集群运行(生产环境常用)

如果是在已经部署了Spark的环境运行,不需要把Spark依赖打进jar包,直接用Spark自带的提交命令运行即可:

spark-submit --class com.mycompany.app.App target/my-app-1.0-SNAPSHOT.jar

这种方式Spark会自动加载环境中自带的Spark依赖包,不需要自行打包。


额外注意事项

  • Spark 3.2.0对应的Scala版本要和你依赖里的_2.13匹配,如果你本地Spark环境用的是Scala 2.12,需要把依赖的artifactId改成spark-core_2.12,否则会出现版本不兼容的错误。
  • 开发调试阶段如果是在VSCode里直接运行,可以不用打包,VSCode的Maven插件会自动把依赖加到类路径里,直接右键运行主类即可。

内容的提问来源于stack exchange,提问作者Santeau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:57:02