2

我有一个相当简单的问题。我们通常将其作为 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>了,显然顶级不是它的那杯茶吗?

4

2 回答 2

2

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

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

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

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

项目2.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>

构建.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
于 2012-06-27T17:50:36.117 回答
1

采用

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

不需要宏定义来封装它。

于 2012-07-13T13:55:36.157 回答