查找 Maven 使用的 Java 选项



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

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

编辑:我相信这与这个问题不同,因为我不想看到环境变量的值。我宁愿看看 Maven 实际使用了哪些设置,无论是来自 env var、settings.xml还是其他方式。

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

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

插件配置:仅用于编译
使用 Maven 编译器插件配置来编译应用程序代码和测试代码,您可以通过compileArgs配置条目设置所需的 Xmx、Xms、Xss 选项,可用于编译和测试编译目标。此处和其他类似的 SO 答案中提供了一个官方示例。
下面还显示了第三点的示例。

插件配置:仅用于测试执行
使用 Maven Surefire 插件配置进行测试执行,您可以通过测试目标的argLine配置条目设置要在运行时使用的所需 Java 选项。此处提供官方示例。
下面还显示了第三点的示例。

插件配置:通过属性(和配置文件(
您可以将上述两个选项(如果是常见的 Java 选项(组合为属性值,以传递给compileArgsargLine配置条目,或者为每个配置具有不同的属性(根据您的需要(。

<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>
[...]

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

mvn clean install -Djvm.options=-Xmx512

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

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

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

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

更新
毕竟,执行的mvn命令是一个操作系统脚本。在 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.7binjava.exe" -Xmx256M -classpath "path_toapache-maven-3.1.1bin..bootplexus-classworlds-2.5.1.jar" "-Dclassworlds.conf=path_toapache-maven-3.1.1bin..binm2.conf" "-Dmaven.home=path_toapache-maven-3.1.1bin.." org.codehaus.plexus.classworlds.launcher.Launcher compile 

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


更新2
此外,由于Maven毕竟是一个Java工具,并且从其脚本中看到它调用java命令,您可以通过稍微更改Maven脚本并使用jinfo命令来查看此SO答案中建议的所有可用选项,该命令应该真正根据其他SO答案为您提供答案。

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

相关内容

  • 没有找到相关文章

最新更新