我有一个相当简单的问题。 我们通常将此作为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>
,显然顶层不是它的一杯茶?
答案 0 :(得分:2)
Ant task可用于调用其他Ant项目中的目标。
默认情况下,当前项目的所有属性都将在新项目中可用。或者,您可以将
inheritAll
属性设置为false,只将“user”属性(即在命令行上传递的属性)传递给新项目。在任何一种情况下,传递给新项目的属性集都将覆盖在新项目中设置的属性
构建构建的一种方法是首先调用子项目,
然后使用Ant
任务调用主项目。
在以下示例中, project2.xml 初始化属性, 然后由主项目文件 build.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 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来封装它。