Ant - 为所有子目录运行Build.xml

时间:2011-05-23 14:19:32

标签: ant build target

我有一个位于顶层的build.xml,我希望脚本为每个子目录运行一个目标,并将子目录名称作为参数传递给ANT目标。

你能帮忙吗?/ ??

由于

4 个答案:

答案 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文件来提供要使用的变量。