如何为GradleWorkerMain设置JVM选项?

9
当我设置GRADLE_OPTSJAVA_OPTS时,运行项目的./gradlew build命令时将为GradleWrapperMain设置这些选项。但我也需要为GradleWorkerMain设置它们。
我该怎么做?
以下是在Bamboo中运行Gradle作业时的ps列表。我的JAVA_OPTS(例如-Dcool.opt=1)在GradleWorkerMain中缺失。
53854 ? Sl 2:13 /home/apps/jdk7/bin/java -Dorg.gradle.daemon=false -Dcool.opt=1 -Xms1g -Xmx8g -XX:PermSize=256m -XX:MaxPermSize=768m -Djava.security.egd=file:/dev/./urandom -Dorg.gradle.appname=gradlew -classpath /path/to/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain build
54272 ? Sl 0:19 /home/apps/jdk1.7.0_45/bin/java -Dfile.encoding=ISO-8859-1 -cp /path/to/lots/of/jars.jar org.gradle.process.internal.launcher.GradleWorkerMain

你为什么需要这个?你试图解决哪个更大的问题?你能给一个具体的例子吗? - Peter Niederwieser
我的情况相当愚蠢:GradleWorkerMain 进程有时会在我的构建服务器上挂起。我想要一些东西来 grep,以便在我杀死它时使用。我不能只杀死所有的 GradleWorkerMain 进程,因为这是一个共享的构建服务器。所以 -Dbamboo.buildKey=${bamboo.buildKey} 就可以解决问题了。 - neu242
3个回答

10

没有直接的方法来为GradleWorkerMain进程设置JVM选项。 大多数(但不是全部)分叉新工作者实现JavaForkOptions,因此您可以尝试:

tasks.withType(JavaForkOptions) {
    systemProperty "cool.opt", "1"
    jvmArgs "someArg"
}

没有实现JavaForkOptions的任务类型通常允许以其他方式设置分叉选项。例如:

tasks.withType(JavaCompile) {
    options.fork = true // otherwise won't fork
    options.forkOptions.jvmArgs = ["-Dcool.opt=1"]
}

谢谢你的迅速回答! - neu242

2

我遇到的一个相似问题是 gradle scala 插件。我需要添加下面的配置来控制 Xmx。

tasks.withType(ScalaCompile) {
    configure(scalaCompileOptions.forkOptions) {
        memoryMaximumSize = '1g'
    }
}

0

你可以用以下方式控制它:

test {
    maxHeapSize = "4g"
}

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