Gradle 任务检查是不是定义了属性
Posted
技术标签:
【中文标题】Gradle 任务检查是不是定义了属性【英文标题】:Gradle task check if property is definedGradle 任务检查是否定义了属性 【发布时间】:2015-09-26 22:16:31 【问题描述】:我有一个执行 testng 测试套件的 gradle 任务。 我希望能够将标志传递给任务,以便使用特殊的 testng xml 套件文件(或者如果未设置标志,则仅使用默认套件)。
gradle test
应该运行默认的标准测试套件
gradle test -Pspecial
应该运行特殊的测试套件
我一直在尝试这样的事情:
test
if (special)
test(testng_special.xml);
else
test(testng_default.xml);
但我得到一个未定义的属性错误。解决这个问题的正确方法是什么?
【问题讨论】:
【参考方案1】:if (project.hasProperty('special'))
应该这样做。
请注意,您选择 testng 套件的操作将不起作用,AFAIK:测试任务没有任何 test()
方法。有关工作示例,请参阅 https://discuss.gradle.org/t/how-to-run-acceptance-tests-with-testng-from-gradle/4107:
test
useTestNG
suites 'src/main/resources/testng.xml'
【讨论】:
@user2506293,这还不够。您需要同时检查项目是否具有属性以及是否已设置。 这是 groovy @Opal - null 结果为 false,因此您无需明确检查。 @th3morg 错了,如果属性存在但为空,hasProperty(..) 仍将返回 true,因此如果要检查是否存在而不是空,则必须使用if (project.hasProperty('special') && project.special)
.
我喜欢用:project.properties["special"] == "true"
【参考方案2】:
来自Gradle Documentation:
-P, --project-prop
设置根项目的项目属性,例如-Pmyprop=myvalue
所以你应该使用:
gradle test -Pspecial=true
属性名后有值
【讨论】:
使用 JB Nizet 的解决方案不需要将属性设置为 true,只需定义它即可 确实如此,因为您不是在读取属性值,而只是检查该属性是否存在。假设您正在做相反的事情,所以您使用的是notSpecial
而不是 Special
,并且您需要在您的条件下为该属性设置一个 false 值。使用我的解决方案您不会有问题,因为您将使用 JBNizet 的解决方案传递 -PnotSpecial=false
,而不是传递的值是 true,因为存在 notSpecial
属性。【参考方案3】:
这对我有用:
test
if (properties.containsKey('special'))
test(testng_special.xml);
else
test(testng_default.xml);
【讨论】:
以上是关于Gradle 任务检查是不是定义了属性的主要内容,如果未能解决你的问题,请参考以下文章
onChange 检查对象的所有属性是不是存在且不是未定义或空字符串
JavaScript,检查嵌套对象属性是不是为空/未定义的优雅方法[重复]
Android Gradle 插件Gradle 扩展属性 ① ( Gradle 扩展属性简介 | Gradle 自定义 task 任务示例 )
Android Gradle 插件Gradle 扩展属性 ① ( Gradle 扩展属性简介 | Gradle 自定义 task 任务示例 )