我希望自动化部署应用程序的ANT构建过程。
我想写一个ANT脚本,它会反复寻找 如果子构建失败,则在文件夹中生成build.xml文件并运行它们 它应该通过写日志跳过并继续到其他脚本。 可以发表任何有用的想法或样品。
RootFolder | |-----Folder1 | | | |--SubFolder1 | | build.xml | |--SubFolder2 | | build.xml |-----Folder2 | build.xml | |-----Folder3 build.xml
答案 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>