Gradle 运行 任务仅在定义的 属性
Gradle run task only on defined property
我正在努力让任务仅在定义了特定值时执行。
我正在使用 Gradle 3.5.
task signJar(type: SignJar, dependsOn: reobfJar) {
onlyIf {
project.hasProperty('mod_keystore')
}
keyStore = project.keyStore
alias = project.keyStoreAlias
storePass = project.keyStorePass
keyPass = project.keyStoreKeyPass
inputFile = jar.archivePath
outputFile = jar.archivePath
}
如您所见,我已经尝试了 onlyIf 语句,但任务仍然运行。这会导致崩溃:
Could not get unknown property 'keyStore' for root project 'JustAnotherEnergy' of type org.gradle.api.Project.
属性 'mod_keystore' 未定义,但代码已执行。
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',则 Gradle 无法为例如 'keyStore 设置值' 属性,但任务 SignJar 需要设置此值。
这意味着只有在定义了 属性 'mod_keystore' 时才能执行此任务。如果未定义,则应跳过该任务。
As you can see, I already tried the onlyIf statement, but the task still runs.
不,任务没有运行。您需要区分 配置阶段 和 执行阶段 。设置任务属性的任务闭包在 配置阶段 期间执行,紧接在创建任务之后。在 执行阶段 .
期间,仅执行通过 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
}
我正在努力让任务仅在定义了特定值时执行。
我正在使用 Gradle 3.5.
task signJar(type: SignJar, dependsOn: reobfJar) {
onlyIf {
project.hasProperty('mod_keystore')
}
keyStore = project.keyStore
alias = project.keyStoreAlias
storePass = project.keyStorePass
keyPass = project.keyStoreKeyPass
inputFile = jar.archivePath
outputFile = jar.archivePath
}
如您所见,我已经尝试了 onlyIf 语句,但任务仍然运行。这会导致崩溃:
Could not get unknown property 'keyStore' for root project 'JustAnotherEnergy' of type org.gradle.api.Project.
属性 'mod_keystore' 未定义,但代码已执行。
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',则 Gradle 无法为例如 'keyStore 设置值' 属性,但任务 SignJar 需要设置此值。
这意味着只有在定义了 属性 'mod_keystore' 时才能执行此任务。如果未定义,则应跳过该任务。
As you can see, I already tried the onlyIf statement, but the task still runs.
不,任务没有运行。您需要区分 配置阶段 和 执行阶段 。设置任务属性的任务闭包在 配置阶段 期间执行,紧接在创建任务之后。在 执行阶段 .
期间,仅执行通过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
}