maven surefire argLine 是否覆盖 ./mvn/jvm.config?
Does maven surfire argLine override ./mvn/jvm.config?
我有一个包含以下内容的项目。/mvn/jvm.config :
-Xms32g -Xmx64g -XX:MaxDirectMemorySize=20g
我想知道我是否按如下方式配置我的 maven surfire 插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<argLine>-Xms12g -Xmx30g -XX:MaxDirectMemorySize=30g</argLine>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/RunMmoTests.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
我知道我的 jvm.config 将设置 MAVEN_OPTS
环境变量,但我找不到任何说明 MAVEN_OPTS 和 surfire argLine
之间优先级的文档。哪个覆盖另一个?在 运行 一些测试之后,我感觉 surfire argLine
覆盖了 MAVEN_OPTS
中定义的任何参数。我猜对了吗??
非常感谢
If argLine does not define JVM options, will surefire forked jvm
inherit the jvm options defined in .mvn/jvm.config?
不会。您对构建项目的要求可能与对 运行 测试的要求完全不同。
这里是maven-surefire the source code中的注释:
For the default, the JVM will be a new instance of the same VM as the
one used to run Maven. JVM settings are not inherited from MAVEN_OPTS.
当我们调用 mvn 命令(mvn.cmd
或 bin/mvn
)时,Maven 读取并设置不同的环境变量,并且在 Linux 和 Windows 中执行不同的操作。
- On Linux,
mvn
命令 sets MAVEN_OPTS
变量
将现有的 MAVEN_OPTS
与
$MAVEN_PROJECTBASEDIR/.mvn/jvm.config
文件然后调用 java
passing 将 MAVEN_OPTS
作为参数。
- 在 Windows 上,mvn 命令 sets
JVM_CONFIG_MAVEN_PROPS
与
jvm.config
的内容然后调用 java passing MAVEN_OPTS
和 JVM_CONFIG_MAVEN_PROPS
surefire 插件通过调用 java
命令分叉一个单独的进程来执行测试,但它不会将 MAVEN_OPTS
或 JVM_CONFIG_MAVEN_PROPS
作为参数传递给 JVM。
如果您想为 运行 测试设置与 运行 maven 相同的 JVM 参数,那么您可以在 argLines 中使用 ${parameters}。例如像这样:
<configuration>
<argLine>${MAVEN_OPTS}</argLine>
</configuration>
我有一个包含以下内容的项目。/mvn/jvm.config :
-Xms32g -Xmx64g -XX:MaxDirectMemorySize=20g
我想知道我是否按如下方式配置我的 maven surfire 插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<argLine>-Xms12g -Xmx30g -XX:MaxDirectMemorySize=30g</argLine>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/RunMmoTests.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
我知道我的 jvm.config 将设置 MAVEN_OPTS
环境变量,但我找不到任何说明 MAVEN_OPTS 和 surfire argLine
之间优先级的文档。哪个覆盖另一个?在 运行 一些测试之后,我感觉 surfire argLine
覆盖了 MAVEN_OPTS
中定义的任何参数。我猜对了吗??
非常感谢
If argLine does not define JVM options, will surefire forked jvm inherit the jvm options defined in .mvn/jvm.config?
不会。您对构建项目的要求可能与对 运行 测试的要求完全不同。
这里是maven-surefire the source code中的注释:
For the default, the JVM will be a new instance of the same VM as the one used to run Maven. JVM settings are not inherited from MAVEN_OPTS.
当我们调用 mvn 命令(mvn.cmd
或 bin/mvn
)时,Maven 读取并设置不同的环境变量,并且在 Linux 和 Windows 中执行不同的操作。
- On Linux,
mvn
命令 setsMAVEN_OPTS
变量 将现有的MAVEN_OPTS
与$MAVEN_PROJECTBASEDIR/.mvn/jvm.config
文件然后调用 java passing 将MAVEN_OPTS
作为参数。 - 在 Windows 上,mvn 命令 sets
JVM_CONFIG_MAVEN_PROPS
与jvm.config
的内容然后调用 java passingMAVEN_OPTS
和JVM_CONFIG_MAVEN_PROPS
surefire 插件通过调用 java
命令分叉一个单独的进程来执行测试,但它不会将 MAVEN_OPTS
或 JVM_CONFIG_MAVEN_PROPS
作为参数传递给 JVM。
如果您想为 运行 测试设置与 运行 maven 相同的 JVM 参数,那么您可以在 argLines 中使用 ${parameters}。例如像这样:
<configuration>
<argLine>${MAVEN_OPTS}</argLine>
</configuration>