2010-05-05 60 views
2

我想通過使用GMaven(Maven插件用於在POM中內聯執行Groovy)來執行build.xml(Ant構建文件)。由於我不得不使用maven-antrun-plugin多次執行構建文件。構建文件正在不斷變化,並且從合作伙伴項目中獲得,而且幾乎沒有變化這就是爲什麼我不想將邏輯放入其他環境(常規代碼或Maven配置)的原因。如何設置Groovy Antbuilder的build.xml?

我從xml文件中獲取屬性列表(環境和計算機名稱,這些名稱在數量和名稱上可能會有很大的不同,我不介意這些內容),並希望爲每個機器執行ant構建。我在javadoc中找到了executeTarget方法,但沒有找到如何設置構建文件的位置。我該怎麼做 - 這足夠嗎?

我有如下所示:

<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

一個解決方案是使用從這樣org.apache.tools.ant項目和ProjectHelper類(省略從我的任務,其他細節):

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) 

就像你找到它here添加自定義監聽器 - 從那裏我得到了一段時間後soluting這...

0

你可以直接使用maven-antrun-plugin

如果你這樣做是因爲循環,也許你可以在每臺機器上有一個模塊,並在父pom中使用<pluginManagement>部分,以避免重複maven-antrun-plugin配置。

+0

這不是一個選項,機器和環境相差太多投入他們成模塊。無論如何,謝謝你的回答! – Jan 2010-05-06 06:56:54