2012-12-09 84 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文件中创建的模块间依赖关系来完成的。 –