如何通过 Gradle 和 -D 为我的测试提供系统属性

2022-08-31 08:42:49

我有一个Java程序,它读取系统属性

System.getProperty("cassandra.ip");

我有一个 Gradle 构建文件,我从它开始

gradle test -Pcassandra.ip=192.168.33.13

gradle test -Dcassandra.ip=192.168.33.13

但是 System.getProperty 将始终返回 null

我发现的唯一方法是通过以下方式将其添加到我的Gradle构建文件中

test {
    systemProperty "cassandra.ip", "192.168.33.13"
}

如何通过 -D 进行操作


答案 1

-P 标志用于 gradle 属性,-D 标志用于 JVM 属性。因为测试可能在新的 JVM 中分叉,所以传递给 gradle 的 -D 参数不会传播到测试中 - 这听起来像是你所看到的行为。

您可以像以前一样在块中使用 systemProperty,但通过将其与它一起传递来基于传入的 gradle 属性 -P:test

test {
    systemProperty "cassandra.ip", project.getProperty("cassandra.ip")
}

或者,如果您通过 -D 传入它

test {
    systemProperty "cassandra.ip", System.getProperty("cassandra.ip")
}

答案 2

遇到了这个问题,除了我不想再次在gradle脚本中列出命令行上给出的所有属性。因此,我将所有系统属性发送到我的测试

task integrationTest(type: Test) {
    useTestNG()
    options {
        systemProperties(System.getProperties())
    }
}