2013-07-12 58 views
4

我有兩個蟻文件:Antcall:從另一個文件調用嵌套Ant目標

1)主文件

<include file="otherFile.xml" as="otherFile"/> 

<target name="firstTarget"> 
    <antcall target="otherFile.secondTarget"/> 
</target> 

2)程序文件

<target name="secondTarget"> 
    <antcall target="thirdTarget"/> 
</target> 

<target name="thirdTarget"> 
    <echo message="ok"/> 
</target> 

當我調用firstTarget它表示找不到thirdTarget。 如果我改變secondTarget這樣:

<target name="secondTarget"> 
    <antcall target="otherFile.thirdTarget"/> 
</target> 

然後它工作。但是,我不能直接使用secondTarget。由於第二個文件不knwon前綴otherFile

+0

所以......你在主文件中導入了實用程序文件? – coolcfan

+0

我用include而不是import。 – user1518048

回答

0

的ANT文檔說:

爲每個包含的文件,螞蟻添加包含的路徑,包括構建文件的屬性。通過這個路徑,包含的構建文件可以保留資源並能夠相對於其位置引用它們。 因此,如果我包含一個名爲builddocs的docsbuild.xml文件,我可以將它的路徑作爲ant.file.builddocs,類似於主構建文件的ant.file屬性。

你可以利用它來做你想做的事情,即讓antcall工作,無論它是從「包含」的上下文還是從頂級上下文中調用。你應該做的是將一個屬性的值設置爲otherFile.context爲'otherFile'。如果屬性ant.file.otherFile被定義,則''(即空字符串),如果沒有。然後你可以使用屬性擴展來調用目標;例如:

<antcall target="${otherFile.context}thirdTarget"/> 

還沒有嘗試過,但我看不出爲什麼它不應該工作。

0

你有沒有嘗試沒有文件名(只secondTarget):

<target name="firstTarget"> 
    <antcall target="secondTarget"/> 
</target> 

並導入它沒有別名;

<include file="otherFile.xml"/> 

有一次,我確實喜歡這個,它工作。

0

可以讓螞蟻呼籲其目標是爲下同文件:

<target name="secondTarget"> 
    <antcall target="thirdTarget" antfile="${ant.file}"/> 
</target> 
1

你可以試試:

<ant antfile="otherFile.xml" target="secondTarget"/> 

而且沒有必要列入otherFile。

+0

如果添加'useNativeBaseDir =「true」',則otherFile.xml具有其原始路徑。 –

1

使用在將兩者直接調用,包括任何文件以下模式:

<project name="my-project"> 
    <!-- if this is the top-level build.xml, ${self} == "" --> 
    <condition property="self" value=""> 
    <equals arg1="${ant.project.name}" arg2="my-project" /> 
    </condition> 
    <!-- if this is an included build.xml, ${self} == "my-project." --> 
    <property name="self" value="my-project." /><!-- note the trailing dot --> 
    ... 

然後使用該antcall如下:

<antcall target="${self}target" /> 
0
<import file="otherFile.xml"/>  
<target name="firstTarget"> 
     <antcall target="secondTarget"/> 
</target> 

使用導入任務上傳你的文件,它適合我!