Создайте пользовательскую задачу, которая запускает существующую задачу с измененной конфигурацией - PullRequest
0 голосов
/ 10 апреля 2020

Это в основном вопрос к этому вопросу: Как расширить поведение задачи 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?

...