我有一个带有路径声明的主构建文件
<path id="path.app.src">
<pathelement location="myfolder/src"/>
</path>
然后我用<ant>
<ant antfile="subbuild.xml" inheritAll="false" inheritRefs="false">
<reference refid="path.app.src"/>
</ant>
在subbuild.xml中我有:
<path id="subpath.app.src">
<pathelement location=".. some locations .."/>
<path refid="path.app.src" />
</path>
根据我的理解,使用嵌套调用<ant>
会覆盖subbuild.xml中的path.app.src。
但是我得到一个错误:subbuild.xml:xx:找不到引用路径.app.src。
我做错了吗?这是蚂蚁中的一个错误吗?
我正在使用2006年12月13日编译的Apache Ant 1.7.0版本
谢谢, 梅西
答案 0 :(得分:1)
这是代码示例: 的build.xml
<?xml version="1.0"?>
<project name="test" default="build" basedir=".">
<path id="mainpath">
<pathelement location="my/main/path"/>
</path>
<target name="build">
<ant antfile="subbuild.xml" target="test">
<reference refid="mainpath" torefid="globalpathid"/>
<reference refid="mainpath" torefid="localtotargetpathid"/>
</ant>
</target>
</project>
subbuild.xml
<?xml version="1.0"?>
<project name="subbuild">
<path id="globalpathid">
<pathelement location="my/sub/location"/>
</path>
<target name="test">
<path id="localtotargetpathid">
<pathelement location="my/target/location"/>
</path>
<property name="p.localtotargetpathid" refid="localtotargetpathid" />
<echo>p.localtotargetpathid: ${p.localtotargetpathid}</echo>
<property name="p.globalpathid" refid="globalpathid" />
<echo>p.globalpathid: ${p.globalpathid}</echo>
</target>
</project>
这是控制台日志:
$ ant
Buildfile: build.xml
build:
[ant] Parent project doesn't contain any reference 'mainpath'
test:
[echo] p.localtotargetpathid: d:\my\target\location
[echo] p.globalpathid: d:\my\main\path
BUILD SUCCESSFUL
Total time: 0 seconds
我们可以看到globalpathid
已被覆盖但不是localtotargetpathid
,这是规范中提到的行为。
我还是无法解释第一条消息......
答案 1 :(得分:0)
我认为你在refid path.app.src的子构建文件中有一个不完整的声明。
<path id="subpath.app.src">
<pathelement location=".. some locations .."/>
<path refid="path.app.src" /> <=======
</path>
它不应该有第二个嵌套路径元素(),因为没有与之关联的位置。你编写主构建文件以覆盖没有引用的方式//除了//这个refid对我来说很好看。