如何使用Gradle指定JVM选项?

4

我在gradle.properties中尝试使用org.gradle.jvmargs,但它不起作用。具体来说,我正在尝试使用Gradle更改我的程序的JVM的GC。我不关心Gradle运行的JVM,而是关心我的应用程序所使用的JVM。


org.grade.jvmargs应该有效:请参考https://dev59.com/TZzha4cB1Zd3GeqPIKMa 你确定你是"做对了"吗? - Bohemian
Gradle如何启动你的Java应用程序? 通常情况下,Gradle用于编译你的应用程序,例如生成一个jar文件。然后你可以通过命令行或者集成开发环境来运行该应用程序。 - Spyros K
@SpyrosK 我正在使用Intellij Idea。我在右上角的配置中运行应用程序。 - user5217074
1个回答

4

Gradle文档中应用程序插件的说明如下:

如果您的应用程序需要特定的JVM设置或系统属性,则可以配置applicationDefaultJvmArgs属性。这些JVM参数将应用于运行任务,并且还将考虑在您的分发的生成启动脚本中。

您应该将GC选项放入该属性中。

请注意,如果直接执行可执行JAR文件,即不使用生成的启动脚本,则这不会直接影响其行为。


如果您是从Gradle运行应用程序,则有另外两个选择(仅限!)。

  • JavaExec任务类型允许您通过各种属性设置JVM选项;请参见JavaExec API文档

  • Exec任务类型允许您使用任意参数运行任意命令。但是,如果您使用此方法运行Java应用程序,则需要自己“操纵”所有命令行选项。


我也试过那个,但是没有任何效果。你所说的“如果直接执行可执行JAR文件,这不会直接影响其行为”是什么意思?我还能做些什么呢? - user5217074
2
我也试过那个,但是没有任何效果。你需要清楚地说明你尝试了什么以及如何尝试的。然而,据我所知,没有任何东西可以创建一个可执行的JAR文件并设置自己的JVM选项。可执行的JAR文件没有这个能力。你可以通过阅读JAR文件规范来验证这一点。简单的替代方法是使用一个包装脚本来设置选项。 - Stephen C
我应用了'application'插件,并添加了一行代码:applicationDefaultJvmArgs = ["args", "args", ...],其中args是各种参数。这些都在build.gradle文件中。我的IDE可以正确指定JVM参数,所以我想Gradle也可以,对吗?我知道JAR文件没有JVM,但我只是希望Gradle能够添加我想要的JVM参数,然后在该JVM上运行该JAR文件。 - user5217074
越想越觉得,applicationDefaultJvmArgs应该是有效的。我不明白为什么它不起作用。我开始怀疑我的IDE以某种方式覆盖了我通过Gradle传递给JVM的选项,我不知道... - user5217074
1
任务 runApp(type: JavaExec) 做到了这一点,其中 allJvmArgs = ["args", "args", ...]。 - user5217074

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接