为什么测试时仅forkCount为0时${maven.projectBasedir}/.mvn/jvm.config才生效
配置不生效的根本原因
.mvn/jvm.config中定义的JVM参数仅作用于Maven启动的主进程,而Maven Surefire插件默认会独立分叉新的JVM进程执行测试代码,分叉的子进程不会继承Maven主进程的JVM配置。
当你指定-DforkCount=0时,测试代码会和Maven主进程共用同一个JVM,此时.mvn/jvm.config的配置才会作用于测试逻辑,参数才会生效。你遇到的模块访问报错,本质是测试运行的JVM没有拿到--add-opens权限配置。
更简洁的解决方案
两种方案无需每次执行命令时手动加-DforkCount=0:
方案1:在pom.xml中配置Surefire插件参数(推荐,项目内共享配置)
直接将需要的JVM参数配置到Surefire插件的argLine中,所有开发人员拉取代码后无需额外调整即可直接运行:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <argLine>--add-opens=java.base/java.lang=ALL-UNNAMED</argLine> </configuration> </plugin> </plugins> </build>
方案2:本地配置无需修改pom
在项目根目录的.mvn文件夹下新建maven.config文件,写入以下内容即可:
-DargLine=--add-opens=java.base/java.lang=ALL-UNNAMED
Surefire插件会自动读取argLine系统属性作为测试JVM的启动参数,无需手动加命令参数即可生效。
内容的提问来源于stack exchange,提问作者gouessej
相关产品推荐
相关产品推荐

