我有一个带有自定义测试任务的gradle脚本:
task integrationTest(type:Test) {
jvmArgs '-DmyParam=' + System.getProperty('myParam')
}
如果缺少属性,我希望使用一条好消息使构建失败,但仅当我的任务将被执行时才会失败。我尝试添加
task integrationTest(type:Test) {
if (!System.hasProperty('myParam')) throw new InvalidUserDataException("Missing property myParam")
jvmArgs '-DmyParam=' + System.getProperty('myParam')
}
但即使integrationTest
任务没有被调用,这也会失败。
如何仅在执行任务时检查此项,而不是在gradle启动时检查?
答案 0 :(得分:1)
您可以简单地使用doFirst
关闭。关闭将在任务操作之前执行,因此足够早地修改任务,但不能在配置阶段,但在执行阶段期间,所以,只有执行任务:
task integrationTest(type:Test) {
doFirst {
jvmArgs '-DmyParam=' + System.getProperty('myParam')
}
}
请注意,您可以使用systemProperty
方法定义系统属性:
systemProperty 'myParam', System.getProperty('myParam')
// instead of
jvmArgs '-DmyParam=' + System.getProperty('myParam')
答案 1 :(得分:0)
一位同事帮助我找到答案。将异常移动到doFirst
块将产生所需的结果:
task integrationTest(type:Test) {
doFirst {
if (!System.hasProperty('myParam')) throw new InvalidUserDataException("Missing property myParam")
}
jvmArgs '-DmyParam=' + System.getProperty('myParam')
}
或者,如果您需要在执行任务之前使构建失败,您可以检查是否将调用该任务:
project.gradle.taskGraph.whenReady {
if(project.gradle.taskGraph.hasTask(":integrationTest")) {
if (!System.hasProperty('myParam')) throw new InvalidUserDataException("Missing property myParam")
}
}