Ant脚本自动化构建过程

时间:2012-12-09 08:49:12

标签: ant build build-automation antbuilder

我希望自动化部署应用程序的ANT构建过程。

我想写一个ANT脚本,它会反复寻找   如果子构建失败,则在文件夹中生成build.xml文件并运行它们   它应该通过写日志跳过并继续到其他脚本。 可以发表任何有用的想法或样品。

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

2 个答案:

答案 0 :(得分: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”文件,并在每个文件上调用“clean deploy”目标。

虽然自动选择子文件夹构建很简单,但它很少适用于大型项目,除非构建彼此独立(构建顺序很重要)。

以下示例使用显式文件列表,而不是无序的文件集:

<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)在“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>

答案 1 :(得分: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>