Как установить build.xml для Groovy Antbuilder? - PullRequest
2 голосов
/ 05 мая 2010

Я хочу выполнить build.xml (файл сборки Ant) с использованием GMaven (плагин Maven для встроенного выполнения Groovy в POM). Так как я должен выполнить buildfile несколько раз с использованием maven-antrun-plugin, это не вариант. Файл сборки развивается и взят из партнерского проекта с небольшими изменениями. Вот почему я не хочу помещать логику в другое окружение (код Groovy или конфигурация Maven).

Я беру список свойств (имена среды и компьютеров, которые могут сильно различаться по количеству и именам, на мой взгляд, их нельзя поместить в модули) из файла xml и хочу выполнить сборки ant для каждой из этих машин. Я нашел метод executeTarget в javadocs, но не о том, как установить местоположение файла сборки. Как я могу это сделать - и этого достаточно?

Что у меня выглядит следующим образом:

<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>

Ответы [ 2 ]

2 голосов
/ 06 мая 2010

Решением является использование классов Project и ProjectHelper из org.apache.tools.ant следующим образом (пропуская другие детали из моей задачи):

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');

Чего здесь не хватает, так это регистрации. Я использовал

antProject.addBuildListener(antListener)

чтобы добавить настроенного слушателя, как вы его нашли здесь - вот откуда я получил решение через некоторое время ...

0 голосов
/ 05 мая 2010

Вы можете напрямую использовать maven-antrun-plugin .

Если вы сделали это из-за цикла, возможно, вы можете иметь один модуль на машину и использовать секцию <pluginManagement> в родительском модуле, чтобы избежать дублирования конфигурации maven-antrun-plugin.

...