Подтвердить что ты не робот

Gradle настраиваемая задача, выполняющая несколько задач

Я хочу запустить несколько задач gradle как один. Поэтому вместо

./gradlew clean build publish

Я хочу создать пользовательскую задачу

./gradlew cleanBuildPublish

который выполняет clean build и publish в порядке.

Как это возможно?

Это не работает

task cleanBuildPublish {
    dependsOn 'clean'
    dependsOn 'build'
    dependsOn 'publish'
}
4b9b3361

Ответ 1

Если вам нужно выполнить некоторые задачи в предопределенном порядке, вам нужно не только установить dependsOn, но также установить для этого свойства свойство mustRunAfter, например, в следующем коде:

task cleanBuildPublish {
    dependsOn 'clean'
    dependsOn 'build'
    dependsOn 'publish'
    tasks.findByName('build').mustRunAfter 'clean'
    tasks.findByName('publish').mustRunAfter 'build'
}

dependsOn не определяет порядок выполнения задач, он просто заставляет одну задачу зависить от другой, а mustRunAfter - делает.

Ответ 2

Вы также можете использовать базовый класс задачи под названием GradleBuild

Здесь вы можете сделать это с помощью GradleBuild

task cleanBuildPublish(type: GradleBuild) {
     tasks = ['clean', 'build', 'publish']
}

Ответ 3

Попробуйте сделать так, чтобы cleanBuildPublish зависел от других задач.

build.gradle

task clean{
    println "lets clean"
}

task build {
    println "lets build"
}

task publish {
    println "lets publish"
}

task cleanBuildPublish{
    println 'lets do all'
}


cleanBuildPublish.dependsOn clean
cleanBuildPublish.dependsOn build
cleanBuildPublish.dependsOn publish

Выход

$ gradle cleanBuildPublish
lets clean
lets build
lets publish
lets do all
:build UP-TO-DATE
:clean UP-TO-DATE
:publish UP-TO-DATE
:cleanBuildPublish UP-TO-DATE

BUILD SUCCESSFUL

Total time: 2.738 secs

проверьте https://docs.gradle.org/current/userguide/more_about_tasks.html#addDependencyUsingTask для более подробной информации

Ответ 4

Если публикация задана в подпроекте под именем subProjectName,

...
tasks.findByPath(':subProjectName:publish').mustRunAfter 'build'
...

Ответ 5

Мой подход

task cleanBuildPublish (type: GradleBuild, dependsOn: ['clean', 'build', 'publish']) { 
}

Это работает для меня.

Ответ 6

Попробуйте добавить defaultTasks в build.gradle. Напр. defaultTasks 'clean', 'build', 'publish'