我有一个位于顶层的build.xml,我希望脚本为每个子目录运行一个目标,并将子目录名称作为参数传递给ANT目标。
你能帮忙吗?/ ??
由于
答案 0 :(得分:3)
查看subant任务。从该页面:
<project name="subant" default="subant1">
<property name="build.dir" value="subant.build"/>
<target name="subant1">
<subant target="">
<property name="build.dir" value="subant1.build"/>
<property name="not.overloaded" value="not.overloaded"/>
<fileset dir="." includes="*/build.xml"/>
</subant>
</target>
</project>
此代码段构建文件将在项目目录的每个子目录中运行ant,其中可以找到名为build.xml的文件。属性build.dir将在subant调用的ant项目中具有值subant1.build。
答案 1 :(得分:2)
这可能就是你要找的东西,
将此作为您的父build.xml中的目标之一
<target name="executeChildBuild">
<ant antfile="sub1/build.xml" target="build" />
<ant antfile="sub2/build.xml" target="build" />
</target>
答案 2 :(得分:1)
如果您想在ant build文件中执行此操作,可以使用Ant Contrib's for task迭代子目录列表并为每个子目录执行ant任务。
<for param="subdir">
<dirset dir="${build.dir}">
<include name="./**"/>
</dirset>
<sequential>
<subant target="${target}">
<property name="subdir.name" value="@{subdir}"/>
</subant>
</sequential>
</for>
我没有测试这段代码,因为没有安装ant,但它接近我想要做的事情。
答案 3 :(得分:1)
如果我正确地阅读了这个问题,那么这可能就是您正在寻找的内容。
所以你的例子......
<target name="do-all">
<antcall target="do-first">
<param name="dir-name" value="first"/>
<param name="intented-target" value="init"/>
</antcall>
<antcall target="do-first">
<param name="dir-name" value="second"/>
<param name="intented-target" value="build"/>
</antcall>
<antcall target="do-first">
<param name="dir-name" value="third"/>
<param name="intented-target" value="compile"/>
</antcall>
</target>
<target name="do-first">
<echo>Hello from ${dir-name} ${intented-target}</echo>
<ant antfile="${dir-name}/build.xml" target="${intented-target}"/>
</target>
当你从Ant调用它时,你可以在命令行输入:
ant do-all
,您的输出应如下所示:
do-all:
do-first:
[echo] Hello from first init
do-first:
[echo] Hello from second build
do-first:
[echo] Hello from third compile
BUILD SUCCESSFUL
Total time: 1 second
您当然需要确保您用作param的目录名实际存在,否则构建将失败。
您还可以通过将值添加到build.properties文件来提供要使用的变量。