这基本上是该问题的后续问题:How to extend the behavior of a Gradle task for a new task type?
我有一个配置了ktlint的项目,我们只希望它显示为警告:
ktlint {
version.set("0.36.0")
verbose.set(true)
disabledRules.set(setOf("import-ordering")) // because of this bug/missing feature in IDEA: https://youtrack.jetbrains.com/issue/KT-10974
ignoreFailures.set(true)
}
但是在Jenkins上,我们希望ktlintCheck
任务失败,因此我们可以将构建标记为不稳定!因此,我开始创建一个运行ktlintCheck
和ignoreFailures.set(false)
的任务。但是我不知道如何运行另一个任务并更改其配置。
我在上面发现的唯一类似的问题/答案是,clinton的答案建议在gradle中这样做:
task TestExt{ Test { systemPropety 'newProperty','fdsjfkd' } }
我真的不知道如何将其转换为Kotlin DSL,但是我尝试过的版本是:
task("postBuildVerify") {
group = "build"
ktlint {
ignoreFailures.set(false)
}
dependsOn("ktlintCheck")
}
但是对于所有任务,ignoreFailures
再次设置为false
!
所以我尝试添加一个Action
:
task("postBuildVerify") {
group = "build"
outputs.upToDateWhen { false } // Prevent UP-TO-DATE
actions.add(Action {
// outputs.upToDateWhen { false } // Cannot call TaskOutputs.upToDateWhen(Spec) on task ':postBuildVerify' after task has started execution.
ktlint {
ignoreFailures.set(false)
}
})
dependsOn("ktlintCheck")
}
但是ktlintChecks永远不会执行,因为运行build
后,它们的输出是UP-TO-DATE。而且我猜想Action将在ktlintCheck
执行之后执行,因为它取决于它。
如何在Kotlin DSL中正确执行此操作?