Gradle 任务检查属性是否已定义

问题描述 投票:0回答:4

我有一个执行 TestNG 测试套件的 Gradle 任务。 我希望能够向任务传递一个标志,以便使用特殊的 TestNG XML 套件文件(或者如果未设置标志,则仅使用默认套件)。

gradle test

...应该运行默认的标准测试套件

gradle test -Pspecial

...应该运行特殊的测试套件

我一直在尝试这样的事情:

test {
    if (special) {
        test(testng_special.xml);
    }
    else {
        test(testng_default.xml);
    }
}

但是我收到了未定义的属性错误。正确的做法是什么?

gradle properties testng build.gradle task
4个回答
105
投票
if (project.hasProperty('special'))

应该这样做。

请注意,您选择 testng 套件的操作将不起作用,据我所知:测试任务没有任何

test()
方法。请参阅 https://discuss.gradle.org/t/how-to-run-acceptance-tests-with-testng-from-gradle/4107 了解工作示例:

test {
    useTestNG {
        suites 'src/main/resources/testng.xml'
    }
}

4
投票

这里有 3 个针对 Kotlin DSL 的解决方案(build.gradle.kts):

val prop = project.properties["myPropName"] ?: "myDefaultValue"
val prop = project.properties["myPropName"] ?: error("Property not found")
if (project.hasProperty("special")) {
    val prop = project.properties["myPropName"]
}

请注意,您可以省略

project.
前缀,因为它隐含在 Gradle 构建文件中。


2
投票

这对我有用:

test {
    if (properties.containsKey('special')) {
        test(testng_special.xml);
    }
    else {
        test(testng_default.xml);
    }
}

-1
投票

来自 Gradle 文档

-P,--project-prop

设置根项目的项目属性,例如 -Pmyprop=myvalue

所以你应该使用:

gradle test -Pspecial=true

属性名称后面有一个值

© www.soinside.com 2019 - 2024. All rights reserved.