用于自动化构建过程的 Ant 脚本



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

我想编写一个 ANT 脚本,该脚本将定期查找 build.xml文件夹中的文件,并在子构建失败时运行它们 它应该跳过并通过写入日志继续其他脚本。任何人都可以发布可以帮助或样本的想法。

根文件夹    |    |-----文件夹1    |           |    |           |--子文件夹1    |           |           构建.xml    |           |--子文件夹2    |           |           构建.xml    |-----文件夹2    |          构建.xml    |    |-----文件夹3             构建.xml

我建议使用 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 这样的依赖管理器在"ivy.xml"文件中声明每个模块的依赖关系。正确设置,这使得每个子模块构建更加独立。为了解决构建"一切都在只去"问题,ivy 提供了一个构建列表任务,可以自动确定正确的构建顺序:

<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>

我已经解决了我的问题,谢谢大家的回复,我使用了下面的技术来处理这种情况。

<?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>

相关内容

  • 没有找到相关文章

最新更新