通过gradle将系统属性从命令行传递到我的应用程序

时间:2014-05-24 12:42:48

标签: java gradle

我的应用需要一个测试位置。我想通过系统属性传递它。

在命令行上运行时,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将系统属性传递给应用程序?

1 个答案:

答案 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)。