在不设置MAVEN_OPTS环境变量的情况下指定Maven内存参数

Ghi*_*iro 18 environment-variables maven

我想知道是否可以使用类似于以下语法指定Maven内存边界:

mvn -Dtest=FooTest -DXmx=512M clean test
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试了几种变化,但没有成功.
我知道MAVEN_OPTS环境变量,但我想避免这种情况.

与上述问题相关,很高兴知道是否有可能以类似的方式指定surefire插件的内存行为,以便它使用重写的内存量分配jvm(最终覆盖<argLine>pom中的参数)插件配置,如果存在)

Chr*_*hie 51

要指定最大内存(不是通过最初请求的MAVEN_OPTS),您可以执行以下操作:

mvn clean install -DargLine="-Xmx1524m"
Run Code Online (Sandbox Code Playgroud)

  • 事实并非如此.如果您使用[jvisualvm](https://visualvm.java.net/),您甚至已经在JDK中(在bin目录下),您将看到该参数未应用于JVM,而是作为系统属性argLine = -Xmx1524m. (4认同)
  • 这不是真的,`argLine` 只影响为运行测试(Surefire)创建的分叉进程,而不是用于进行编译等的实际进程。而 `MAVEN_OPTS` 会影响一切。 (3认同)

amr*_*mra 11

您可以配置surefire-plugin以使用更多内存.看看 Strange Maven内存不足错误.

更新:如果您想从命令行设置参数,请查看您的maven安装目录中的{{mvn.bat}}(或{{mvn}} shell脚本).它使用命令行中指定的其他选项.

下一种可能性是设置surefire-plugin并使用命令行中指定的属性,例如 mvn ... -Dram=512

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <forkMode>once</forkMode>
        <argLine>-Xms${ram}m -Xmx${ram}m</argLine>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)


Kee*_*ren 5

从 Maven 3.3.1 开始,还可以在中指定默认值${maven.projectBasedir}/.mvn/jvm.config

它记录在这里:https://maven.apache.org/docs/3.3.1/release-notes.html#JVM_and_Command_Line_Options