无法使用嵌套引用元素覆盖ant任务的引用

时间:2009-07-14 15:53:44

标签: ant

我有一个带有路径声明的主构建文件

<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版本

谢谢, 梅西

2 个答案:

答案 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对我来说很好看。