Sha*_*gon 2 groovy conditional if-statement gradle gradlew
我正在努力让任务仅在定义特定值时执行。
我正在使用 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
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我已经尝试了 onlyIf 语句,但任务仍在运行。这导致崩溃:
Could not get unknown property 'keyStore' for root project 'JustAnotherEnergy' of type org.gradle.api.Project.
Run Code Online (Sandbox Code Playgroud)
属性 ' mod_keystore ' 没有定义,但代码 get 被执行。
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
}
}
Run Code Online (Sandbox Code Playgroud)
这有效。代码未执行,但我遇到了其他问题:如果未定义属性“ mod_keystore ”,则 Gradle 无法为例如“ keyStore ”属性设置值,但任务 SignJar 需要此值被设置。
这意味着只有在定义了属性“ mod_keystore ”时才应执行此任务。如果未定义,则应跳过该任务。
如您所见,我已经尝试了 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8057 次 |
| 最近记录: |