5 votes

Comment exécuter une tâche Gradle une fois à la fin des tâches du sous-projet

Je travaille avec la structure de projet suivante

Project
|-Subproject1
|-Subproject2
|build.gradle
|settings.gradle

Les sous-modules sont inclus dans le settings.gradle et configuré dans le build.gradle du projet Root.

J'ai 3 tâches à accomplir

  1. build (chaque sous-projet en dispose)
  2. deploy (il s'agit d'un mécanisme de conditionnement pour chaque sous-projet qui doit fonctionner de manière autonome)
  3. finalizeDeployment (ceci ne doit être invoqué qu'une seule fois)

Je veux pouvoir appeler

$gradle deploy <- tous les sous-projets sont déployés et finalize est appelé une fois à la fin

$gradle Subproject1:deploy <- Subproject1 est déployé et finalize est appelé

build.gradle

configure(subprojects) {

    task build <<{
        println "Do Build "+ project.name
    }

    task deploy(dependsOn:build){
        println 'deploy '+project.name

        doLast{
            finalizeDeployment.execute()
        }
    }
}

task finalizeDeployment{

    dependsOn subprojects.deploy

    doLast{
        println 'Finalize Deployment'
    }
}

5voto

n3utrino Points 1492

Il fonctionne de la manière suivante

configure(subprojects) {

    task build << {
        println "Do Build " + project.name
    }

    task deployPrepare(dependsOn: build)<<{
            println 'deploy ' + project.name
    }

    task deployFinalize(dependsOn: deployPrepare)<<{
        parent.deployFinalize.execute()
    }
}

task deployFinalize {

    doLast {
        println 'Finalize Deployment'
    }
}

deployFinalize.dependsOn(subprojects.deployPrepare)

La sortie de la console pour gradle subproject1:deployFinalize est :

Do Build subproject1
deploy subproject1
Finalize Deployment

La sortie de la console pour gradle deployFinalize est :

Do Build subproject1
deploy subproject1
Do Build subproject2
deploy subproject2
Finalize Deployment

0voto

Sean McCauliff Points 1051

Il semble que vous puissiez obtenir la même fonctionnalité avec les dépendances sans avoir besoin d'utiliser parent.deployFinalize.execute().

Là où je travaille, nous utilisons :

subprojects {

   task dist(type: Copy, dependsOn: assemble) {
       ...
   }
}

task dist
dist.dependsOn subprojects.dist

task finalizeDist(dependsOn : subprojects.dist) {
    ...
}
dist.dependsOn finalizeDist

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X