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

IntelliJ中基于Maven构建Spark-Scala WordCount程序时遭遇java.lang.NoSuchMethodError问题求助

解决Maven下Spark+Scala的NoSuchMethodError问题

这个NoSuchMethodError本质是Scala类库版本冲突导致的——Spark 3.0.1基于Scala 2.12构建,但你的Maven配置里有几个关键问题,导致运行时加载了不兼容的Scala类。下面是具体的排查和修复步骤:

问题根源分析

错误栈指向scala.util.matching.Regex的构造方法找不到,说明运行时类路径里的Scala库版本,和Spark编译时依赖的Scala版本不匹配。SBT能正常运行是因为它会自动管理Scala版本的一致性,而Maven需要手动配置插件和依赖来保证这一点。

具体修复方案

1. 替换过时的仓库

你配置的scala-tools.org仓库已经废弃多年,会导致依赖拉取异常,换成Maven中央仓库即可:

<repositories>
    <repository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
    </repository>
    <repository>
        <id>scala-staging</id>
        <url>https://oss.sonatype.org/content/repositories/staging/</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
    </pluginRepository>
</pluginRepositories>

2. 更新Maven Scala插件

旧的org.scala-tools:maven-scala-plugin不支持Scala 2.12和JDK 11,换成维护中的net.alchim31.maven:scala-maven-plugin:

<build>
    <sourceDirectory>src/main/scala</sourceDirectory>
    <testSourceDirectory>src/test/scala</testSourceDirectory>
    <plugins>
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <version>4.8.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>testCompile</goal>
                    </goals>
                    <configuration>
                        <scalaVersion>${scala.version}</scalaVersion>
                        <args>
                            <arg>-target:jvm-11</arg>
                        </args>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- 可选:添加shade插件打包成可执行Jar,避免运行时依赖冲突 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>WordCount</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3. 清理冗余依赖

你的pom里的org.specs:specs是非常老旧的测试库(适配Scala 2.8及更早),建议换成现代的测试库比如org.scalatest:scalatest,或者直接移除(如果不需要测试的话):

<!-- 替换成ScalaTest(可选) -->
<dependency>
    <groupId>org.scalatest</groupId>
    <artifactId>scalatest_2.12</artifactId>
    <version>3.2.10</version>
    <scope>test</scope>
</dependency>

4. 确保依赖版本一致性

确认所有Scala相关依赖的版本都和scala.version统一,并且Spark的artifactId后缀_2.12和你的Scala大版本匹配(Spark 3.0.1的spark-core_2.12确实对应Scala 2.12)。

验证步骤

  • 清理Maven本地缓存:运行mvn clean install -U,强制刷新依赖
  • 如果是在IntelliJ中运行,先执行File -> Invalidate Caches...,然后重启IDE
  • 可以用mvn exec:java -Dexec.mainClass="WordCount"命令直接运行,或者打包后用java -jar target/Project-1.0-SNAPSHOT.jar运行

以上调整应该能解决版本冲突问题,让你的WordCount程序正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:37:38