为什么gradle应用程序插件无法设置JVM参数

时间:2014-08-08 21:59:07

标签: java gradle jvm-arguments

我有一个带有main()方法的Java程序,它需要一个系统属性-Dmy_sys_prop=SOME_VALUE。我使用application插件来执行我的程序。我的build.gradle中的配置如下:

apply plugin: "java"
apply plugin: "maven"
apply plugin: "application"

sourceCompatibility = 1.6
targetCompatibility = 1.6

ext.mySysProp = '"-Dmy_sys_prop=' + mySysProp + '"'

applicationDefaultJvmArgs = [mySysProp]
mainClassName = "com.demo.SampleApp"

task wrapper(type: Wrapper) {
    gradleVersion = '2.0'
}

我正在使用以下命令来运行该程序。

./gradlew clean build run -PmySysProp=SOME_VALUE

我无法理解为什么我的Java程序无法使用mySysProp值。

有人可以帮助我吗?或者,告诉我一个更好的方法来实现这一目标。

谢谢, NN

1 个答案:

答案 0 :(得分:4)

引号关闭(这不是一个shell环境,其中参数可以/需要用引号括起来),并且使用同名的额外属性覆盖mySysProp是可怕的/混乱的。尝试:

applicationDefaultJvmArgs = ["-DmySysProp=$mySysProp"]

PS:我建议使用def foo = "bar"而不是ext.foo = "bar",除非需要从外部作用域和/或其他构建脚本访问该属性(参见本地与全局变量)。