查找Maven使用的Java选项

时间:2016-01-12 09:02:59

标签: java maven maven-3 jvm-arguments java-opts

如何找到Maven正在使用哪些Java选项(Xmx,Xms,Xss等)?

我发现设置的方法是通过MAVEN_OPTS环境。现在我想要一种方法来确保它获得正确的设置。

编辑:我认为它与this question不同,因为我不想看到环境变量的值。我更愿意看看Maven实际使用了哪些设置,无论是来自env var,settings.xml还是其他方法。

EDIT2:我也对为Maven构建设置Java选项的其他方法感兴趣

2 个答案:

答案 0 :(得分:12)

您可以在不同的点和级别(全局或通过插件配置)为Maven设置Java选项:

插件配置:仅适用于编译
使用Maven Compiler Plugin配置编译应用程序代码和测试代码,您可以通过compileArgs配置条目设置所需的Xmx,Xms,Xss选项,可用于compile和{{3}目标。有一个官方示例testCompile和其他SO答案,如here 以下是第三点的示例。

插件配置:仅供测试执行
使用this one配置执行测试,您可以通过Maven Surefire Plugin目标的argLine配置条目设置在运行时使用的所需Java选项。有一个官方的例子test 以下是第三点的示例。

插件配置:通过属性(和配置文件)
您可以将上面的两个选项(在常见Java选项的情况下)合并为属性值,以传递给compileArgsargLine配置条目,或者每个配置具有不同的属性(根据您的需要)。 / p>

<property>
      <jvm.options>-Xmx256M</jvm.options>
</property>

[...]
<build>
  [...]
  <plugins>
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>3.3</version>
       <compilerArgs>
            <arg>${jvm.options}</arg>
       </compilerArgs>
    </plugin>

    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>2.19.1</version>
       <configuration>
            <argLine>${jvm.options}</argLine>
       </configuration>
     </plugin>
   </plugins>
   [...]
</build>
[...]

使用属性还为您提供了两个额外的优势(在集中化之上):您可以使用here然后根据不同的所需行为(以及profiles中的示例)对其进行个性化设置,并且您可以覆盖它们也可以通过命令行,例如:

mvn clean install -Djvm.options=-Xmx512

全局/项目配置:选项文件
从Maven 3.3.1开始,您可以在每个项目的.mvn/jvm.config文件中this SO answer选择。它是MAVEN_OPTS的替代品,范围更窄(每个项目)。但是,由于它是一个新的Maven功能,人们应该意识到这一点,否则可能会影响故障排除和维护。

全球/环境配置:MAVEN_OPTS
Maven specify环境变量用于设置全局执行选项,但适用于共享该环境的所有Maven构建(即每个已登录用户)。

使用-X选项运行Maven(启用调试)时,您将在构建中使用以下输出:

[DEBUG] properties used {java.vendor=Oracle Corporation, ... , env.MAVEN_OPTS=-Xmx256M, ...

<强>更新
毕竟,执行的mvn命令是OS脚本。在Windows中查看它,我发现有可能使用MAVEN_BATCH_ECHO选项,如果启用(值设置为on),它将回显脚本执行的任何命令,因此也调用java命令,您可以在其中查看您的选项(MAVEN_OPTS)是否与传递给它的完整参数列表一起正确选取。

这是我在Windows上测试的执行:

set MAVEN_BATCH_ECHO=on
set MAVEN_OPTS=-Xmx256M
mvn compile > output.txt  

注意:output.txt将包含大量文本,提供构建输出和其他echo执行。作为其中的一部分,它提供了:

>"path_to_\jdk1.7\bin\java.exe" -Xmx256M -classpath "path_to\apache-maven-3.1.1\bin\..\boot\plexus-classworlds-2.5.1.jar" "-Dclassworlds.conf=path_to\apache-maven-3.1.1\bin\..\bin\m2.conf" "-Dmaven.home=path_to\apache-maven-3.1.1\bin\.." org.codehaus.plexus.classworlds.launcher.Launcher compile 

如您所见,-Xmx256M选项已正确选取。如果其他操作系统的maven脚本没有提供此选项,那么您只需将其添加到脚本(echo执行之前的简单java,显示命令,也足够了)。
您可以在bin子文件夹下的maven安装文件夹中找到maven脚本。

<强> UPDATE2
此外,由于Maven毕竟是一个Java工具,正如您可以从其脚本中看到它调用java命令,您可以通过稍微更改Maven脚本并使用{well-known来查看所有可用选项。 {1}}命令应该根据其他SO answer真正给你答案。

答案 1 :(得分:0)

使用详细的调试输出启动Maven可能会有所帮助(-debug,我认为?)。否则只需执行ps aux | grep java并检查进程的参数(假设* nix)。

相关问题