我的应用需要一个测试位置。我想通过系统属性传递它。
在命令行上运行时,gradle不会传递值:
./gradlew -Dfoo=bar clean cucumber
Java代码:
System.out.println("**foo(props):"+ System.getProperty("foo"));
输出:
**foo(props):null
我已经看过一些关于此here的文档,但是当我尝试在我的gradle脚本中使用它时,我收到以下错误:
不推荐按需创建属性(a.k.a.动态属性),并计划在Gradle 2.0中删除。有关替换动态属性的信息,请阅读http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html。
不推荐使用的动态属性:“task'上的”systemProperties“:cucumber'”,值:“{jna.platform.library ....”。
这是我的build.gradle的片段:
task cucumber() {
dependsOn assemble, compileTestJava
doLast {
systemProperties = System.getProperties()
javaexec {
main = "cucumber.api.cli.Main"
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
args = ['-f', 'pretty', '--glue', 'steps', 'src/test/resources']
}
}
}
如何通过Gradle将系统属性传递给应用程序?
答案 0 :(得分:4)
systemProperties
需要进入javaexec
:
task cucumber(type: JavaExec) {
dependsOn assemble, compileTestJava
main = "cucumber.api.cli.Main"
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
args = ['-f', 'pretty', '--glue', 'steps', 'src/test/resources']
systemProperties = System.getProperties()
}
PS:除非您绝对需要将多个问题合并到一个任务中,否则总是更喜欢任务类型(例如JavaExec
)而非方法(例如javaexec
)。