2013-12-12 48 views
0

我正在開發一個複雜的多模塊開源ivy項目,它的ant build.xml頂級水平啓動每個常春藤模塊的構建。但是這裏的目標不是修改原始的構建腳本(包括ivy.xml和build.xml),並且使用maven作爲外層來啓動ant構建,然後獲取構建的結果並將它們發佈到nexus服務器。如何使用maven發佈一個ivy項目(包含多個模塊)的多個工件到maven倉庫(nexus)

這裏的難點在於,這裏構建的工件是多個罐子,我們需要用maven將所有這些罐子發佈到nexus服務器。由於一個pom.xml只映射一個maven artifafct,在這種情況下,多個artifact不是通過maven而是通過ivy構建的。所以我想知道是否有一個可行的方法來實現我的目標。

目前,在頂層pom.xml中,我使用maven-antrun-plugin在頂層調用build.xml,並使用build-helper-maven-plugin來附加工件,但它不起作用。

回答

0

目前我正在爲您的類似任務工作。我們有一個巨大的,完整的遺留系統,整個版本用螞蟻編寫。這就是我們如何處理這個任務:

  1. 無論什麼時候,你就必須接受它,行家=每個構件JAR(當然,你可以使用帶有各種限制條件的附件,但它是一個真正的虐待和強烈不推薦) 。它具有它的理念:在一天結束的時候,你的系統由(如你自己所說的)組成模塊,所以每個模塊必須具有版本,源代碼和(最重要的)對其他模塊的依賴關係。
  2. 要重新使用現有的ant代碼,您可以查看antrun插件。我們所做的是將所有常見構建代碼(即生成器執行,附件創建,程序集等)簡單地分隔到父類 poms類型爲「pom」。然後,我們通過激活兒童體育屬性來執行相關目標。下面是一個例子

    <build> 
    <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <version>1.7</version> 
         <executions> 
          <execution> 
           <id>EXECUTION_NAME</id> 
           <phase>generate-sources</phase> 
           <goals> 
            <goal>run</goal> 
           </goals> 
           <configuration> 
            <target if="EXECUTION_TRIGGER_PROPERTY"> 
             <taskdef resource="net/sf/antcontrib/antlib.xml"/> 
            </target> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
    </plugins> 
    </build> 
    

    而且在孩子POM我們簡單地定義

    <properties> 
        <EXECUTION_TRIGGER_PROPERTY>true</EXECUTION_TRIGGER_PROPERTY> 
    </properties> 
    

    記得看maven lifecycle guide選擇適合您的執行正確的相位。

  3. 不要忘記,你可以使用Maven插件來使事情變得更容易。 E.g而不是在螞蟻中運行<javac>任務,打破文件與罐子類型做你所有的編譯。您還可以找到生成javadoc,jaxws等的插件。

正如你所看到的,讓你的系統和maven一起工作並不那麼簡單。它會要求你重新思考你的構建如何工作。另一方面,在大多數情況下,查看和理解依賴關係的能力,在現代IDE中工作的便利性,二進制存儲庫等都是值得的。

+0

謝謝,你的答案是鼓舞人心的。現在,我發現解決這個問題的一個解決方案是使用maven的安裝/部署插件並使用「安裝/部署文件」目標。然後創建多個執行,它們將查找要發佈的jar,指定工件細節,併爲每個工件生成pom文件。當然,應該有一個主要的神器要建立,我們可以把它作爲默認的一個。 – fisherbill

相關問題