2012-12-09 135 views
0

我想自動化部署應用程序的ANT構建過程。使腳本自動化構建過程

我想編寫一個ANT腳本,它應該會重複查找文件夾中的 build.xml文件並運行它們,如果子版本失敗 它應該跳過並通過寫入日誌繼續寫入其他腳本。 任何請發佈可幫助或想法的想法。

 
RootFolder 
    | 
    |-----Folder1 
    |   | 
    |   |--SubFolder1 
    |   |   build.xml 
    |   |--SubFolder2 
    |   |   build.xml 
    |-----Folder2 
    |   build.xml 
    | 
    |-----Folder3 
      build.xml 

回答

0

我已經解決了我的問題,謝謝大家的回覆,我用下面的技術處理這種情況。

<?xml version="1.0" ?> 
<project name="MasterBuildPrj" default="MasterBuild"> 
    <macrodef name="iterate"> 
     <attribute name="target"/> 
     <sequential> 
      <subant target="@{target}"> 
       <fileset dir="." 
         includes="**/build.xml" 
         excludes="build.xml"/> 
      </subant> 
     </sequential> 
    </macrodef> 
    <target name="MasterBuild" description="Build all sub projects"> 
     <iterate target="build"/> 
    </target> 

    <target name="clean" description="Clean all sub projects"> 
     <iterate target="clean"/> 
    </target> 
</project> 
1

我建議使用subant任務

<project name="Subant demo" default="deploy-everything"> 
    <target name="deploy-everything"> 
     <subant> 
      <fileset dir="." includes="**/build.xml" excludes="build.xml"/> 
      <target name="clean"/> 
      <target name="deploy"/> 
     </subant> 
    </target> 
</project> 

這會發現所有「的build.xml」文件,並呼籲每一個「乾淨部署」的目標。

儘管自動拾取子文件夾的構建很簡潔,但除非構建彼此獨立(構建順序非常重要),否則它很少適用於大型項目。在「常春藤

<project name="Subant demo" default="deploy-everything"> 
    <target name="deploy-everything"> 
     <subant> 
      <filelist dir="."> 
       <file name="Folder1/SubFolder1/build.xml"/> 
       <file name="Folder1/SubFolder2/build.xml"/> 
       .. 
      </filelist> 
      <target name="clean"/> 
      <target name="build"/> 
     </subant> 
    </target> 
</project> 

最後,最先進的解決方案是使用像ivy依賴管理者要申報每個模塊的依賴關係:

下面的示例使用一個明確的文件列表,而不是一個文件集是無序.xml「文件。正確設置,這使得每個子模塊更獨立。爲了解決構建「一切只能去問題」常春藤提供了一個buildlist任務,可以自動確定正確的構建順序:

<target name="deploy-everything"> 
    <ivy:buildlist reference="build-path"> 
     <fileset dir="." includes="**/build.xml" excludes="build.xml"/> 
    </ivy:buildlist> 

    <subant buildpathref="build-path"> 
     <target name="clean"/> 
     <target name="build"/> 
    </subant> 
</target> 
+0

沒錯,它確實有效的大項目,構建順序也很重要,你可以看看我的解決方案是沒有任何機會優先提供有... :) – Azhar

+0

@Azhar使用常春藤的buildlist任務的我只知道自動確定構建順序的方法。它是基於ivy.xml文件中創建的模塊間依賴關係來完成的。 –