我想自动化用于部署应用程序的 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>