2013-11-21 35 views
0

我有一個用分號分隔的jar列表。財產的內容從構建文件的文件,而不是部分內容,但它看起來像這樣:如何從Ant中的屬性中的文件名列表中創建可用文件的列表?

<property name="jars" value="a.jar;b.jar;c.jar"/> 

而且我想,以檢查是否所有文件都可用。我知道如何使用手動做到這一點:

<target name="opt"> 
    <echo message="jars: ${jars}"/> 
    <condition property="found"> 
    <and> 
     <available file="a.jar"/> 
     <available file="b.jar"/> 
     <available file="c.jar"/> 
    </and> 
    </condition> 
    <echo message="found: ${found}"/> 
</target> 

但如何才能,如果文件列表是一個屬性,不能被寫入構建文件這樣做嗎?

我需要類似「應用和映射可用文件」。如何才能做到這一點?

+1

查看[一組文件的Ant檢查存在](http://stackoverflow.com/a/5288804/1078068)爲例。如果'jars'是一個逗號分隔的列表,那麼在這個問題中應用答案會更容易。否則,您可以使用'替換字符串'替換分號分隔列表中的'Jars',如[在Ant屬性中替換字符](http://stackoverflow.com/a/14135833/1078068) –

+0

@ ChadNouis看起來很有前途,但是當我嘗試它時,我的Ant 1.7.1說道:「restrict不支持嵌套的」not「元素」。 – ceving

+0

我能夠複製您在Ant 1.7.1中看到的錯誤消息。 Ant 1.8.2不再出現此錯誤。如果您堅持使用Ant 1.7.1,請將'xmlns:rsel =「antlib:org.apache.tools.ant.types.resources.selectors」'添加到''元素。然後將「」更改爲「」和「」改爲「」。 –

回答

2

您可以使用pathconvert將您的文件字符串轉換爲可用於文件集的fileset-include-pattern;例如:

<pathconvert property="includespattern" pathsep=","> 
    <path path="a.jar;b.jar;c.jar;nonexisting.jar" /> 
    <globmapper from="${basedir}/*" to="*" handledirsep="true" /> 
</pathconvert> 

<fileset id="your.fileset" dir="${basedir}" includes="${includespattern}"/> 
    <!-- fileset will only contain existing files --> 
<echo>${toString:your.fileset}</echo> 
+0

這不是問題的答案,而是一個替代解決方案的好主意。 – ceving

相關問題