创建一个自定义任务,以更改配置运行现有任务

时间:2020-04-10 09:41:21

标签: gradle-kotlin-dsl gradle-task ktlint

这基本上是该问题的后续问题: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任务失败,因此我们可以将构建标记为不稳定!因此,我开始创建一个运行ktlintCheckignoreFailures.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中正确执行此操作?

0 个答案:

没有答案