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

Spark 3.5.0升级遇java.lang.NoSuchFieldError: JAVA_11问题求助

解决Spark 3.5.0升级测试报错:NoSuchFieldError: JAVA_11

问题本质

这个错误是因为Spark 3.5.0依赖的org.apache.commons.lang3.JavaVersion类需要包含JAVA_11枚举值,但你的项目中加载了低版本的commons-lang3(低于3.12.0),旧版本里没有这个字段,导致类初始化失败。

调试与修复步骤

1. 排查依赖冲突

执行Maven命令查看commons-lang3的依赖树,定位引入旧版本的来源:

mvn dependency:tree -Dincludes=org.apache.commons:commons-lang3

输出中会显示所有commons-lang3的版本,以及引入它们的上层依赖。

2. 强制统一commons-lang3版本

在项目的pom.xml中,通过dependencyManagement强制指定Spark要求的版本(3.12.0),覆盖所有依赖的引入:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>

如果某些依赖明确引入了旧版本,直接在该依赖下排除commons-lang3:

<dependency>
    <groupId>[冲突依赖的groupId]</groupId>
    <artifactId>[冲突依赖的artifactId]</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 确认Java版本配置一致性

Spark 3.5.0支持Java 8和11,但需保证编译、测试环境统一:

  • 使用Java 8:确保Maven编译插件、IDE的项目/模块SDK、测试运行JDK均为1.8
  • 使用Java 11:更新Maven插件配置,指定source/target为11,并添加必要的JVM参数:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.2</version>
    <configuration>
        <jvmArgs>--add-opens java.base/java.lang=ALL-UNNAMED</jvmArgs>
    </configuration>
</plugin>

4. 清理缓存并重新构建

执行命令清理本地缓存,强制更新依赖后重新构建:

mvn clean install -U

5. 深度调试类加载问题(若以上无效)

添加JVM参数打印类加载详情,找到加载JavaVersion类的JAR文件:

mvn test -Dtest=ABCTest -DargLine="-verbose:class"

在输出中查找org.apache.commons.lang3.JavaVersion的加载路径,确认是否为旧版本JAR,再针对性处理该依赖。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:13:17