2009-07-14 12 views
1

Ich habe eine Haupt-Build-Datei mit einem Pfad Erklärungkann nicht

<path id="path.app.src"> 
    <pathelement location="myfolder/src"/> 
</path> 

Dann rufen Sie überschreiben Referenz mit Ant-Task mit verschachteltem Referenzelement i eine Aufgabe in Teildatei mit <ant>

<ant antfile="subbuild.xml" inheritAll="false" inheritRefs="false"> 
    <reference refid="path.app.src"/> 
</ant>   

in subbuild.xml ich habe:

<path id="subpath.app.src"> 
    <pathelement location=".. some locations .."/> 
    <path refid="path.app.src" /> 
</path> 

In meinem Verständnis der Aufruf von <ant> mit einem verschachtelten sollte path.app.src in subbuild.xml überschreiben.

Aber ich bekomme einen Fehler wie: subbuild.xml: xx: Referenz path.app.src nicht gefunden.

Mache ich etwas falsch? Ist es ein Insekt?

Ich bin mit Apache Ant Version 1.7.0 am 13. Dezember 2006 zusammengestellt

Danke, Lionel

Antwort

1

in der Tat ist es jetzt das richtige Verhalten zu haben scheint, aber ich kann nicht erklären, was ich habe das erste Mal falsch gemacht.

hier ist der Code Beispiel: 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> 

hier ist das Konsolenprotokoll:

$ 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 

wir globalpathid sehen war überschreiben, aber nicht localtotargetpathid, das ist der Behvior Männer in der Spezifikation erwähnt.

noch kann ich nicht die erste Nachricht erklären ...

+0

ich meinte die erste Nachricht: [ant] Übergeordnetes Projekt enthält keine Referenz 'Hauptpfad' – Lionel

0

Ich glaube, Sie haben eine unvollständige Erklärung hier in der subbuild Datei von refid path.app.src.

<path id="subpath.app.src"> 
    <pathelement location=".. some locations .."/> 
    <path refid="path.app.src" /> <======= 
</path> 

Es sollte nicht das zweite verschachtelte Pfadelement() haben, da kein Speicherort damit verknüpft ist. Die Art und Weise, wie Sie die Haupt-Build-Datei geschrieben haben, um keine Referenz // zu überschreiben, ist eine gute Sache.