maven Surfere argLine是否覆盖。/mvn/jvm.config?

maven Surfere argLine是否覆盖。/mvn/jvm.config?,maven,maven-plugin,maven-surefire-plugin,jvm-arguments,Maven,Maven Plugin,Maven Surefire Plugin,Jvm Arguments,我有一个包含以下内容的项目。/mvn/jvm.config: -Xms32g -Xmx64g -XX:MaxDirectMemorySize=20g 我想知道是否按如下方式配置我的maven冲浪插件: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <ve

我有一个包含以下内容的项目。/mvn/jvm.config:

-Xms32g -Xmx64g -XX:MaxDirectMemorySize=20g
我想知道是否按如下方式配置我的maven冲浪插件:

<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> 

org.apache.maven.plugins
maven surefire插件
2.9
-Xms12g-Xmx30g-XX:MaxDirectMemorySize=30g
src/test/resources/RunMmoTests.xml
我知道我的jvm.config将设置
MAVEN_OPTS
环境变量,但我找不到任何说明MAVEN_OPTS和surface
argLine
之间优先级的文档。哪一个优先于另一个?在运行了一些测试之后,我感觉surface
argLine
覆盖了
MAVEN\u OPTS
中定义的任何参数。我的猜测正确吗

非常感谢

如果argLine没有定义JVM选项,那么surefire是否会启动分叉JVM 是否继承.mvn/jvm.config中定义的jvm选项

不会的。构建项目的要求可能与运行测试的要求完全不同

以下是maven surefire的评论:

默认情况下,JVM将是与虚拟机相同的虚拟机的新实例 一个曾经是Maven的。JVM设置不是从MAVEN_选项继承的

当我们调用mvn命令(
mvn.cmd
bin/mvn
)时,Maven读取和设置不同的环境变量,并且在Linux和Windows中执行不同的操作

  • 在Linux上,
    mvn
    命令通过 将现有的
    MAVEN_选项
    $MAVEN\u PROJECTBASEDIR/.mvn/jvm.config
    文件,然后调用java
    MAVEN_选择
    作为参数
  • 在Windows上,mvn命令
    JVM\u CONFIG\u MAVEN\u PROPS
    带有
    jvm.config的内容
    ,然后调用java
    MAVEN\u选项
    jvm\u config\u MAVEN\u道具
surefire插件通过调用
java
命令为执行测试提供了一个单独的过程,但它不会将
MAVEN\u OPTS
JVM\u CONFIG\u MAVEN\u PROPS
作为参数传递给JVM

如果您想为运行test和运行maven设置相同的JVM参数,那么可以在argline中使用${parameters}。例如:

<configuration>
  <argLine>${MAVEN_OPTS}</argLine>
</configuration>

${MAVEN_OPTS}

首先,为什么要使用maven surefire插件的这么旧的版本?单元测试真的需要这样的内存设置吗?而且。运行64GiB的构建?你使用了多少百万个模块?你在运行什么maven版本/jdk等?我正在开发一个内存中的数据库,我们在堆上/堆下运行了一系列测试,其中包括数百万个输入数据,这就是为什么我需要使用不同的内存设置来运行我的测试。我正在使用:-Jdk 11-maven 3.6.1所以这是应该通过maven故障保护插件运行的集成测试,也应该使用最新的。。。那么为什么要使用如此古老的surefire版本呢?原因2.9大约是9岁?我强烈建议使用最新版本…那么为什么要为maven命令添加内存设置呢?我怀疑maven需要64 G来构建您的项目。在您的测试中,您可以这样做,但您应该使用这些东西……这些是扩展测试,而不是集成测试。关于surefire的问题,我不能真正回答这个问题,我不是维护这些测试的人,但我会建议所有者更新到更新的版本。64G不适合maven构建项目,它们是jvm选项。对不起,如果我误导了你,我没有提供完整的插件配置。请检查我的最新记录。运行不同的设置后,我可以确认这是我得到的:)