2010-06-11 67 views
2

我想讓Ant自動包含或導入與特定模式匹配的資源,但我真的很困擾語法。以下是我已經試過:Ant 1.8包含或導入嵌套的資源集合

<import> 
    <fileset dir="${basedir}" includes="*-graph.xml" /> 
</import> 

不過,我只是得到錯誤信息

import requires file attribute or at least one nested resource 

要導入的文件(幷包括)都表示,你可以使用一個嵌套的資源集合,以及資源集合文檔說<文件集>是一個資源集合。我谷歌搜索,根本找不到任何有用的例子。

我使用Ant 1.8.1(使用ant -version驗證)

編輯

發現問題。首先,SOMETHING必須匹配表達。沒有匹配的文件,它會爆炸 - 即使可選= true,這很奇怪!其次,匹配文件是有效的Ant文件(即使它們只包含<項目/ > - 只是創建一個空文件不夠好)。

更好的錯誤消息,請Apache! :-)

回答

1

嘗試:

<foreach target="-import" param="file.name"> 
    <fileset dir="${basedir}" includes="*-graph.xml" /> 
</foreach> 

<target name="-import"> 
    <import file="${file.name}" /> 
</target> 

是在螞蟻的contrib任務(http://ant-contrib.sourceforge.net/tasks/tasks/index.html)我不知道這是否會工作,我只是想出了它的飛行。

+0

我想這樣做,但我拼命地試圖擺脫儘可能多的蟻害的東西,我可以。我試圖簡化一個20萬行的構建腳本,它使用大量的ant-contrib來嘗試和執行程序性的東西,而不是讓ant以聲明的方式繼續進行。 Ant 1.8和擴展點是我在這條路上的第一步。 – dty 2010-06-11 21:01:40

1

這裏有一個簡單的方法來解決這個問題:

<project name="the-name-of-the-project"> 
    <import> 
    <fileset dir="${basedir}" includes="*-graph.xml" erroronmissingdir="false"/> 
    <fileset file="${ant.file.the-name-of-the-project}"/> 
    </import> 
</project> 

這樣,全套進口的文件從來都不是空的,因爲它包括含有該聲明的文件。這僅適用於<import>指令,因爲它省略了已導入的文件; <include>指令會輕微地導致遞歸。

注意如果basedir總是存在,則erroronmissingdir="false"是可選的。