我有一个带有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
我不明白为什么mySysProp值对我的Java程序不可用。

有人可以帮我吗?或者,向我展示实现此目标的更好方法。

谢谢,
神经网络

最佳答案

引号已关闭(这不是可以/需要将引号括在引号中的shell环境),并且使用具有相同名称的额外属性覆盖mySysProp令人恐惧/困惑。尝试:

applicationDefaultJvmArgs = ["-DmySysProp=$mySysProp"]

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

10-04 10:09