2012-01-25 29 views
1

所以...我有build.xml,它從basedir加載屬性文件。當加載兩個extenal屬性文件時,不能用ant-contrib取消屬性

然後,作爲目標我執行以下操作:

<var name="Var1" value="<property_from_**first**_loaded_property_file>" /> 
<var name="<property_from_**first**_loaded_property_file>" unset="true"/> 
<property file="../<other directory>/<**second**_property_file>.properties" /> 
<var name="Var2" value="<property_from_**second**_loaded_property_file>"/> 

的這裏ceavat是既有相同屬性名稱。它不能改變。

那麼,到底,我應該得到這樣的特性:

Var1=<property_from_**first**_loaded_property_file> 

Var2=<property_from_**second**_loaded_property_file> 

但是相反 - 我得到的跡象表明,從第一屬性文件屬性(VAR1)不取消設置,然後填入新的值從第二個屬性文件。螞蟻貢獻未設置應處理的事情:/ ...像這樣:

Var1 = Var2 

爲什麼我沒有得到預期的結果?

+0

你想說什麼? – rodrigoap

+0

從回聲結果我得到的跡象,從Pirts屬性文件的值不是未設置,然後從第二個屬性文件中填充新值。 ant-contribs未設置應該處理的事情:/ –

+0

屬性文件包含什麼 – oers

回答

1

我認爲這個問題是,即使你加載變量爲antcontrib var,它仍然是一個螞蟻property第一,從而不可改變的。

我知道你不能更改屬性文件,但是你對腳本本身有什麼樣的自由?您可以嘗試利用範圍規則和antcallback任務來確定變量的加載位置。

例如,下面的實現 - 儘管有些亂七八糟 - 我認爲你是後:

<?xml version="1.0" encoding="utf-8"?> 
<project name="Test" basedir="."> 

    <path id="ant.classpath"> 
     <fileset dir="${basedir}"> 
      <include name="ant-contrib_AP.jar"/> 
     </fileset> 
    </path> 

    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="ant.classpath"/> 

    <target name="test"> 

     <antcallback target="load-more-prop" return="Var2"/> 

     <loadproperties> 
      <file file="prop1.properties"/> 
     </loadproperties> 

     <property name="Var1" value="${var}" /> 

     <echo>${Var1}</echo> 
     <echo>${Var2}</echo> 

    </target> 

    <target name="load-more-prop"> 

     <loadproperties> 
      <file file="prop2.properties"/> 
     </loadproperties> 

     <property name="Var2" value="${var}" /> 
    </target> 
</project> 

在我的控制檯我看到:

Buildfile: C:\Users\mfelzani\workspace-junk\junk\build.xml 
test: 
load-more-prop: 
[echo] 7 
[echo] 1 
BUILD SUCCESSFUL 
Total time: 905 milliseconds 

我設置的值相匹配prop1.properties和prop2.properties,分別爲var屬性。

+0

舷窗,隊友!!!我檢查了這一點assap;) –

+0

真棒和祝你好運。另外,在加載prop1之後,不要害怕在您的「測試」等效目標中爲prop2調用loadproperties,以便您可以使用該聚合的屬性。另外,對於不一致的loadproperties/property任務使用情況感到抱歉。在那裏複製/粘貼的受害者。我現在要修復它以保持一致。 –

+0

如果它確實有效,如果您將此答案標記爲「答案」,我會很喜歡它......這將是我的第一個答案!謝謝! :) –

0

您無法取消設置值。

WRONG: <var name="<property_from_**first**_loaded_property_file>" unset="true"/> 

你必須取消設置變量

CORRECT: <var name="Var1" unset="true"/> 
+0

是的,我知道,但...嗯...但如果我使用$ {variable_form_first_loaded_properties_file}指定值?我將無法以後將新的值存儲到同一個屬性名稱... –

+0

@HX_unbanned如果它是一個變量它可能工作,但我不知道 – oers

+0

嗯, - 它不工作:(...也許還有其他的方法來比較在兩個不同的propfiles相同的名稱屬性? –

0

如果您需要覆蓋某些現有屬性或userproperty(通過ant命令行
parameter -Dkey = value定義的屬性),則可以使用Ant Plugin Flaka作爲antcontrib的替代方法。
隨着Flaka的讓你的任務創建一個新的屬性或覆蓋所有現有財產直截了當:

<project xmlns:fl="antlib:it.haefelinger.flaka"> 

<property name="foo" value="bar"/> 

<!-- create new property --> 
<fl:let>foo := 'baar'</fl:let> 
<echo>$${foo} => ${foo}</echo> 

<!-- 
    overwrite existing property 
    notice the double '::' in foo ::= 'baz' 
--> 
<fl:let>foo ::= 'baz'</fl:let> 
<echo>$${foo} => ${foo}</echo> 

</project>