导入时自动调用Ant目标

时间:2012-06-27 14:32:19

标签: ant

我有一个相当简单的问题。 我们通常将此作为Ant

的build.xml文件
<project default="" name="Caterpillar Common settings">
    <property name="some.name" value="some.value" />
</project>

因此,如果我们在另一个.xml项目中导入这个,它会将'some.name'设置为'some.value'。

有时设置这个'some.name'有点复杂,需要一些写在几个小目标内的逻辑。

问题:我如何自动调用目标,就像顶层的标记一样?

我试过<antcall>,显然顶层不是它的一杯茶?

2 个答案:

答案 0 :(得分:2)

Ant task可用于调用其他Ant项目中的目标。

  

默认情况下,当前项目的所有属性都将在新项目中可用。或者,您可以将inheritAll属性设置为false,只将“user”属性(即在命令行上传递的属性)传递给新项目。在任何一种情况下,传递给新项目的属性集都将覆盖在新项目中设置的属性

构建构建的一种方法是首先调用子项目, 然后使用Ant任务调用主项目。

在以下示例中, project2.xml 初始化属性, 然后由主项目文件 build.xml 使用。

project2.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="project2" default="initialize">
  <dirname property="project2.dir" file="${ant.file.project2}" />
  <property name="caterpillar.dir" location="${project2.dir}" />

  <target name="initialize">
    <property name="some.name" value="some.value" />
    <ant dir="${caterpillar.dir}" antfile="build.xml" target="build" />
  </target>
</project>

的build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="Caterpillar-Common-Settings">
  <target name="build">
    <echo message="${some.name}" />
  </target>
</project>

构建将从命令行初始化,如下所示:

$ ant -f project2.xml

输出

Buildfile: /home/caterpillar/project2.xml

initialize:

build:
     [echo] some.value

BUILD SUCCESSFUL
Total time: 0 seconds

答案 1 :(得分:1)

使用

<Sequential>
    <echo message="something" />
</sequential>

没有必要使用macrodef来封装它。