2010-05-05 4 views
2

Je veux exécuter un build.xml (Ant buildfile) à partir de GMaven (Maven Plugin pour l'exécution en ligne de Groovy dans un POM). Depuis que je dois exécuter le fichier de construction plusieurs fois en utilisant le maven-antrun-plugin n'est pas une option. Le fichier de construction évolue et provient d'un projet partenaire avec peu de changements. C'est pourquoi je ne veux pas mettre la logique dans un autre environnement (code groovy ou configuration Maven). Je prends une liste de propriétés (les noms d'environnement et de machine qui peuvent différer considérablement en nombre et noms, à mon avis cela ne peut être mis en modules) d'un fichier xml et qui veulent exécuter des constructions ant pour chacune de ces machines. J'ai trouvé la méthode executeTarget dans les javadocs mais pas comment définir l'emplacement du fichier de construction. Comment puis-je faire cela - et est-ce suffisant?Comment définir le fichier build.xml pour Groovy Antbuilder?

Ce que je présente comme suit:

<plugin> 
    <groupId>org.codehaus.groovy.maven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>some ant builds</id> 
     <phase>process-sources</phase> 
     <goals> 
      <goal>execute</goal> 
     </goals> 
     <configuration> 
      <source> 
      def ant = new AntBuilder() 
      def machines = new XmlParser().parse(new File(project.build.outputDirectory + '/MachineList.xml')); 

      machines.children().each { 

      log.info('Creating machine description for ' + it.Id.text() + '/' + it.Environment.text()); 
       ant.project.setProperty('Environment',it.Environment.text()); 
       ant.project.setProperty('Machine',it.Id.text()); 

       // What's missing?      

       ant.project.executeTarget('Tailoring'); 

      } 

      log.info('Ant has finished.') 

      </source> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Répondre

2

Une solution utilise le projet Classes et ProjectHelper de org.apache.tools.ant comme celui-ci (en omettant les autres détails de ma tâche):

import org.apache.tools.ant.Project 
import org.apache.tools.ant.ProjectHelper 

def antFile = new File('src/main/ant/myBuildfile.xml') 

//create a project with the buildfile 
def antProject = new Project() 
antProject.init() 
ProjectHelper.projectHelper.configureProject(antProject, antFile) 

// run it with ant and set the target 
antProject.executeTarget('myTarget'); 

Ce qui manque ici est l'exploitation forestière. Je

antProject.addBuildListener(antListener) 

pour ajouter un écouteur personnalisé comme vous le trouvez here - c'est là où je suis le soluting après un certain temps ...

0

Vous pouvez utiliser directement maven-antrun-plugin.

Si vous avez fait cela à cause de la boucle, peut-être vous pouvez avoir un module par machine, et utiliser une section <pluginManagement> dans le pom parent pour éviter la duplication de la configuration de maven-antrun-plugin.

+0

Ce n'est pas une option, les machines et les environnements sont trop différents pour mettre les en modules. Merci pour votre réponse quand même! – Jan

Questions connexes