Properties 梯度任务检查是否定义了属性

Properties 梯度任务检查是否定义了属性,properties,gradle,task,testng,Properties,Gradle,Task,Testng,我有一个执行testng测试套件的gradle任务。 我希望能够向任务传递一个标志,以便使用一个特殊的testng xml套件文件(如果没有设置标志,则只使用默认套件) gradle测试 应该运行默认的标准测试套件 gradle测试-Pspecial 应该运行特殊的测试套件 我一直在尝试这样的事情: 测试{ 国际单项体育联合会(特别){ test(testng_special.xml); } 否则{ test(testng_default.xml); } } 但是我得到一个未定义的属性错误

我有一个执行testng测试套件的gradle任务。 我希望能够向任务传递一个标志,以便使用一个特殊的testng xml套件文件(如果没有设置标志,则只使用默认套件)

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

gradle测试-Pspecial
应该运行特殊的测试套件

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

测试{
国际单项体育联合会(特别){
test(testng_special.xml);
}
否则{
test(testng_default.xml);
}
}
但是我得到一个未定义的属性错误。正确的方法是什么

if (project.hasProperty('special'))
我应该这样做

请注意,您选择testng套件所做的操作不会起作用,请注意:测试任务没有任何
test()
方法。有关工作示例,请参阅:

test {
    useTestNG {
        suites 'src/main/resources/testng.xml'
    }
}
发件人:

-P、 --项目道具

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

因此,您应该使用:

gradle test -Pspecial=true
在属性名称后加上一个值

这对我很有用:

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

使用JB Nizet的解决方案,不必将属性设置为true,只需定义它即可。这是真的,因为您不是在读取属性值,而是在检查属性是否存在。假设您做的是相反的,那么您使用的不是
Special
,而是
notSpecial
,并且您需要在您的条件下为该属性设置一个假值。使用我的解决方案,您不会有问题,因为您将使用jbniset的解决方案传递
-PnotSpecial=false
,而传递的值无论如何都是true,因为
notSpecial
属性存在。@user2506293,这还不够。您需要同时检查project是否有属性以及是否设置了属性。这是groovy@Opal-null会导致false,因此您不需要显式检查。@th3morg这是错误的,如果属性存在但为null,hasProperty(..)仍将返回true,因此您必须使用
if(project.hasProperty('special')&&project.special)
如果要同时检查存在性和非空。我喜欢使用:
project.properties[“special”]=“true”