我正在努力让任务仅在定义特定值时执行。
我正在使用Gradle 3.5。
Could not get unknown property 'keyStore' for root project 'JustAnotherEnergy' of type org.gradle.api.Project.
如您所见,我已经尝试过onlyIf语句,但任务仍在运行。这导致崩溃:
task signJar(type: SignJar, dependsOn: reobfJar) {
if(project.hasProperty('mod_keystore')) {
keyStore = project.keyStore
alias = project.keyStoreAlias
storePass = project.keyStorePass
keyPass = project.keyStoreKeyPass
inputFile = jar.archivePath
outputFile = jar.archivePath
}
}
属性' mod_keystore '没有定义,但代码被执行。
{{1}}
这很有效。代码没有被执行,但我遇到了其他问题: 如果属性' mod_keystore '未定义,Gradle无法为例如' keyStore '设置值。属性,但任务SignJar需要设置此值。
这意味着只有在属性' mod_keystore '被定义为。如果未定义,则应跳过该任务。
答案 0 :(得分:4)
如您所见,我已经尝试过onlyIf语句,但任务仍在运行。
不,任务没有运行。您需要区分配置阶段和执行阶段。您正在设置任务属性的任务关闭在配置阶段期间,在创建任务后立即执行。在执行阶段期间,仅执行通过doFirst
或doLast
添加的任务操作(由任务类型定义)和闭包。
如果您通过onlyIf
或enabled
禁用或跳过任务,则只会禁用/跳过任务的执行(阶段),而不是配置(相位)
作为针对特定问题的解决方案,您可以依靠onlyIf
条件的第一种方法,但添加一种访问项目属性的自动防故障方法:
task signJar(type: SignJar, dependsOn: reobfJar) {
onlyIf {
hasProperty('mod_keystore')
}
keyStore = findProperty('keyStore')
alias = findProperty('keyStoreAlias')
storePass = findProperty('keyStorePass')
keyPass = findProperty('keyStoreKeyPass')
inputFile = jar.archivePath
outputFile = jar.archivePath
}