2012-09-13 51 views
4

我目前正在從Ant的XML文件中加載屬性。但是,我想在for循環中執行當前的ant任務,同時每次爲同一組屬性加載新的XML屬性文件。如何從XML屬性文件加載變量?

我知道ant-contrib的var任務的存在,它允許我重寫屬性。但是,我不確定如何將它與來自XML文件的加載屬性相結合。我首先想到了遍歷所有屬性,然後使用propertyregex任務將它們設置爲新值。不幸的是,當我開始編寫代碼時,我意識到我不知道如何實際加載屬性值,因爲它們無法覆蓋以前設置的屬性。 (好吧,他們可以使用var任務,但不能用於從XML文件加載,據我所知)。

任何想法?我正在尋找理想的是那被稱爲像

<xmlvars file="myxmlpropertyfile.xml"/> 

這將與它覆蓋的變量異常功能類似於

<xmlproperty file="myxmlpropertyfile.xml"/> 

任務。

+0

爲了澄清第一段 - 我的意思是我想運行一些我的任務迭代。每次迭代時,我想根據不同版本的mysemlproperties.xml(在不同的目錄中找到)將myxmlproperties.xml中存在的屬性設置爲不同的值。 – grumblebeans

回答

2

你可以用<xmlproperty>任務做的事情之一是爲每個屬性添加一個特定值。爲什麼不簡單地使用參數的名稱作爲前綴?

否則,您可以使用<echoproperties>任務取消設置所有屬性,然後循環執行<for>任務的下一次迭代。

這樣的事情,但是這不是測試:

<for param="my.directory"> 
    <fileset dir="${some.directory}"/> 
    <sequential> 
     <xmlproperty file="@{my.directory}/myxmlpropertyfile.xml" 
      prefix="foo-fighters"/> 
      <blah, blah, blah/> 
      <for param="reset.var"> 
       <echoproperty prefix=foo-fighters"/> 
       <sequential> 
        <var name="@{reset.var}" 
        unset="true"/> 
       </sequential> 
      </for> 
    </sequential> 
</for> 

基本上,您使用外部<for>循環遍歷您的目錄,並使用<xmlproperty>設置屬性的名稱。 <blah blah blah/>意味着做你想做的。然後,在轉到外部循環的下一次迭代之前,請執行一個循環,該循環將取消您之前在<xmlproperty>任務中設置的所有變量。

訣竅是使用一個變量前綴,以保證變量名稱很容易找到。因此foo-fighters

0

它看起來像我應該能夠通過使用var任務的unset屬性來完成此操作。將回報...

+0

它的工作原理。每次迭代我只需使用xmlproperty任務設置屬性,然後循環訪問屬性以取消設置。然後,我會從新的XML文件中加載它們。 – grumblebeans