2010-06-16 69 views
15

我所有的項目及其版本的屬性文件中定義是這樣的:如何迭代文件中的屬性?

ProjectNameA=0.0.1 
ProjectNameB=1.4.2 

我想在遍歷所有的項目,並在Ant腳本中使用他們的名字和版本。

目前我閱讀使用屬性任務的整個文件,然後遍歷一個給定的列表中一個循環是這樣的:

<for list="ProjectNameA,ProjectNameB" param="project"> 
    <sequential> 
    <echo message="@{project} has version ${@{project}}" /> 
    </sequential> 
</for> 

我怎樣才能避免項目名稱的硬編碼在for循環? 基本上遍歷每一行,並隨時提取項目的名稱和版本。

回答

12

看到,因爲你已經在使用antcontrib for,如何利用該propertyselector任務:

<property file="properties.txt" prefix="projects."/> 
<propertyselector property="projects" match="projects\.(.*)" select="\1"/> 

<property file="properties.txt" /> 
<for list="${projects}" param="project"> 
    ... 
</for> 

這裏的想法是與projects前綴一次讀取性能,以及使用結果集屬性以propertyselector任務構建以逗號分隔的項目列表。然後,屬性重新讀取而不是的前綴,以便您的for循環可以像以前一樣繼續。

+0

添加了與給定錯誤的關係,並對for元素進行了序列化以使其更加明顯。 – 2011-10-05 07:38:14

+0

想要添加一個編輯,但它被拒絕了。因此,我將它添加爲註釋:for任務未在最新的jar中的antcontrib.properties中以某種方式列出。解決方法是將其作爲一個名稱包含在taskdef中的類,如http://sourceforge.net/tracker/?func=detail&aid=2838574&group_id=36177&atid=416920 – 2011-10-05 08:50:52

+0

中的bug報告中所述,感謝Martin Martin 。對於其他沒有安裝ant contrib的東西的用戶,您可能還需要以下行: 參考:http:// ant-contrib。 sourceforge.net/tasks/index.html#intro – 2012-07-24 23:04:08

0

如果您正在閱讀額外的.property文件(除了build.properties),您需要牢記的一點是範圍界定。如果你讀了一個額外的文件(通過屬性file =「foo.property」)標籤,ant會顯示文件被讀取,並且加載屬性。但是,當你引用它們時,它們會出現未定義的。