Это в основном вопрос к этому вопросу: Как расширить поведение задачи Gradle для нового типа задачи?
У меня есть проект с настроенным 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)
. Но я не мог понять, как запустить другую задачу и изменить ее конфигурацию.
Единственный подобный вопрос / ответ, который я нашел, был упомянут выше, и там ответ от Клинтона предлагает сделать это в 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
. И я предполагаю, что Действие будет выполнено ПОСЛЕ ktlintCheck
, если оно зависит от него.
Как правильно сделать это в Kotlin DSL?