Создайте настраиваемую задачу, которая запускает существующую задачу с измененной конфигурацией
По сути, это следующий вопрос: как расширить поведение задачи 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)
}
Но на Дженкинсе мы хотим ktlintCheck
задача не удалась, чтобы мы могли отметить сборку как нестабильную! Итак, я начал создавать задачу, которая запускаетсяktlintCheck
с участием ignoreFailures.set(false)
. Но я не мог понять, как запустить другую задачу и изменить ее конфигурацию.
Единственный подобный вопрос / ответ, который я нашел, был упомянут выше, и ответ от Клинтона предлагает сделать это в градиенте:
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?