【发布时间】:2011-05-23 14:19:31
【问题描述】:
我有一个 build.xml 位于顶层,我希望脚本为每个子目录运行一个目标,并将子目录名称作为参数传递给 ANT 目标。
你能帮忙吗?/??
谢谢
【问题讨论】:
-
“脚本”下面是什么意思:bat、sh等?
我有一个 build.xml 位于顶层,我希望脚本为每个子目录运行一个目标,并将子目录名称作为参数传递给 ANT 目标。
你能帮忙吗?/??
谢谢
【问题讨论】:
看看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>
这个 sn-p 构建文件将在项目目录的每个子目录中运行 ant,其中可以找到一个名为 build.xml 的文件。在 subant 调用的 ant 项目中,属性 build.dir 的值为 subant1.build。
【讨论】:
这可能就是你要找的,
把它作为你的目标之一放在你的父 build.xml 中
<target name="executeChildBuild">
<ant antfile="sub1/build.xml" target="build" />
<ant antfile="sub2/build.xml" target="build" />
</target>
【讨论】:
如果您想在 ant 构建文件中执行此操作,可以使用 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,但我想它接近你想要做的。
【讨论】:
如果我正确阅读了这个问题,那么这可能就是您要寻找的。
所以对于你的例子......
<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
您当然需要确保您用作参数的目录名称确实存在,否则构建将失败。
您也可以随时通过将值添加到 build.properties 文件来提供要使用的变量。
【讨论】: