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

使用--add-modules=jdk.incubator.vector时JUnit测试无法通过Maven运行

解决Maven构建中JUnit测试无法加载jdk.incubator.vector的问题

问题概述

在Maven构建的Java应用中引入SIMD代码后,通过指定参数的mvn exec:java命令和Eclipse都能正常运行程序,但执行mvn install时JUnit测试抛出类找不到异常,无法加载jdk.incubator.vector.Vector。

已完成的配置

  • 运行程序的命令:
mvn exec:java -Dexec.mainClass="com.path.to.app.MainClass" -Dexec.classpathScope=runtime -Dexec.systemProperties="-da --add-modules=jdk.incubator.vector"
  • 创建.mvn/jvm.config文件,内容:
--add-modules=jdk.incubator.vector
  • 在pom.xml中配置maven-compiler-plugin(编译阶段):
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.10.1</version>
    <configuration>
        <compilerArgs>
            <arg>--add-modules=jdk.incubator.vector</arg>
        </compilerArgs>
    </configuration>
</plugin>

错误详情

java.lang.NoClassDefFoundError: jdk/incubator/vector/Vector
...
Caused by: java.lang.ClassNotFoundException: jdk.incubator.vector.Vector
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

环境信息

  • OpenJDK 19
  • Maven 3.8.6
  • Ubuntu 20.04
  • JUnit 4.13.2依赖配置:
<junit.version>4.13.2</junit.version>
...
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>

解决方法

问题根源是JUnit测试阶段未传入--add-modules=jdk.incubator.vector参数——maven-compiler-plugin仅负责编译阶段,而测试阶段由maven-surefire-plugin管控,需要单独配置该插件添加JVM参数:

在pom.xml的project/build/plugins节点下添加以下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M7</version> <!-- 可使用与当前Maven兼容的最新版本 -->
    <configuration>
        <argLine>--add-modules=jdk.incubator.vector</argLine>
    </configuration>
</plugin>

补充说明

.mvn/jvm.config的配置理论上会作用于Maven所有阶段,但部分环境或Maven版本可能存在兼容性问题,直接配置surefire插件是更可靠的方式,确保测试运行时能正确加载孵化模块。

配置完成后,先执行mvn test验证测试是否通过,再运行mvn install即可完成构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:55:22