将ant目标传递给子目录中的多个build.xml文件

时间:2009-05-04 10:15:37

标签: ant build

我有一个包含多个模块的项目,每个模块都在自己的目录中。每个模块都有自己的ant构建文件(build.xml)

在根目录中,我设置了一个通用构建文件,该文件以正确的顺序调用每个模块的构建文件。

<?xml version="1.0"?>
<project name="bridgedb" default="all" basedir=".">
  <target name="all">
    <ant dir="corelib"/>
    <ant dir="tools"/>
    <ant dir="makeGdb"/>
    <ant dir="cytoscape-plugin"/>
  </target>
</project>

现在每个模块都有一个“干净”的目标,所以我添加了以下几行:

 <target name="clean">
    <ant dir="corelib" target="clean"/>
    <ant dir="tools" target="clean"/>
    <ant dir="makeGdb" target="clean"/>
    <ant dir="cytoscape-plugin" target="clean"/>
  </target>

还有更多这样的目标。有没有办法重写构建文件以避免这种重复?我找了一个包含活动目标的内置属性,但我找不到它。

2 个答案:

答案 0 :(得分:7)

为什么不使用antcall来调用引用所有子目标的目标,并参数化要调用的目标。 e.g。

 <antcall target="doStuffToSubdirs">
    <!-- let's clean -->
    <param name="param1" value="clean"/>
  </antcall>

然后:

<target name="doStuffToSubdirs">
   <ant dir="corelib" target="${param1}"/>
   <ant dir="tools" target="${param1}"/>
    ...etc
</target>

因此,您可以参数化对子目录的调用。如果你添加一个新的子目录,你只需要将该子目录添加到'doStuffToSubdirs'目标(我也会重命名它!)

答案 1 :(得分:2)

在commonbuild.xml和子文件中放入一个干净的目标,只需导入父build.xml

<import file="${parent.dir}/commonbuild.xml" />

现在,您将能够在子构建中调用clean目标。您还可以通过在任何子构建中创建一个干净的目标来覆盖此目标。