2015-09-11 1 views
0

Je veux écrire une tâche Gradle à partager parmi tous mes sous-projets. Cette tâche trouve toutes les autres tâches dans le sous-projet où il s'appelle qui ont le type "GenerateMavenPom" et exécute ces tâches. En faisant cela, mes sous-projets peuvent définir n'importe quelle publication Maven qu'ils souhaitent, et je peux exécuter gradle avec une seule tâche comme "gradle generateMavenPomFiles" pour créer le pom.xml sans connaître les types de publication individuels dans chaque sous-projet. Pourquoi? Parce que le plugin Maven crée des tâches de publication dont les noms dépendent du type de publication.Gradle - tâche personnalisée pour exécuter toutes les tâches GenerateMavenPom

A l'intérieur de mes sous-projets bloc dans le fichier build.gradle racine je, en passant sous-projet en tant que délégué de fermeture:

task generateMavenPomFiles << { 
    model { 
     TaskCollection<GenerateMavenPom> pomTasks = subproject.tasks.matching { t -> t.TASK_TYPE.equals("GenerateMavenPom") } 

     if (pomTasks != null) { 
      pomTasks.each { pomTask -> pomTask.execute } 
     } 
    } 
} 

J'ai accédé aux tâches d'édition Maven à l'intérieur du bloc modèle comme selon le plugin doc:

Le plugin "maven-publish" utilise un support expérimental pour la configuration du plug-in en retard, et aucune tâche GenerateMavenPom ne sera construite jusqu'à ce que l'extension de publication soit configurée. Le plus simple façon de faire en sorte que le plug-in d'édition est configuré lorsque vous tentative d'accéder à la tâche GenerateMavenPom est de placer l'accès l'intérieur d'un bloc modèle ...

Dans mes sous-projets que j'ai des publications Maven définies comme celui-ci :

publishing { 
    publications { 
     mavenCustom(MavenPublication) { 
      artifacts = someArtifactTask.archivePath 
      groupId = someGroupId 
      artifactId = someArtifactId 
      version = someVersion 
     } 
    } 
} 

Bien sûr, "gradle generateMavenPomFiles" ne fonctionne pas. La tâche s'exécute sur chaque sous-projet mais je ne vois pas les tâches Maven POM réelles créées par le plugin appelé. Je suis assez nouveau sur Gradle + Groovy, donc j'ai peut-être mal compris quelque chose, ou ma logique est juste fausse.

Toute aide est grandement appréciée!

Répondre

0

vous pouvez le faire avec l'extrait suivant:

task runAllGenerateMavenPomTasks { 
    dependsOn tasks.withType(GenerateMavenPom) 
}