2012-02-01 7 views
3

propertyfileタスクを使用してプロパティを更新した後、そのプロパティを読み取ろうとしています。何かのようにプロパティファイルの更新後にプロパティをリロードする

<property file="test.properties" /> 
<echo>before :: ${modules}</echo> 

<propertyfile file="test.properties" > 
    <entry key="modules" type="string" operation="+" value="foo" /> 
</propertyfile> 

<property file="${status.path}/test.properties" /> 
<echo>after :: ${modules}</echo>. 

2回目はロードされていないようです。しかし、プロパティファイルが更新されます。

答えて

2

sudocodeがすでに述べたように、Core Antのプロパティは不変です - 理由があります。 Antelope Ant Task秒からunsetタスクに
あなたは1つのライナーでファイルに設定されたすべてのプロパティの設定を解除することができます:

<unset file="test.properties"/> 


はその後

<propertyfile file="test.properties" > 
    <entry key="modules" type="string" operation="+" value="foo" /> 
</propertyfile> 

が動作します。

ヒント:タスクは、通常のプロパティでのみ機能し、xmlpropertiesでは機能しません。
しかし、単純なworkararoundはあなただけで特定のタスクのためのアンテロープを使用したくない場合は、同様の機能を持つmacrodefまたは自タスクを書くことができ
<echoproperties prefix="..." destfile="foo.properties"/>
、その後
<unset file="foo.properties"/>
を使用するだけで、あります。

0

Antプロパティは不変です。一度設定すると固定されます。したがって、プロパティファイルを再ロードしても、すでに設定されているプロパティの値は更新されません。

0

このマクロを使用すると、全体のプロパティファイルが二回ロードされている。この場合、固定1

<macrodef name="set" > 
    <attribute name="name"/> 
    <attribute name="value"/> 
    <sequential> 
     <script language="javascript"> 
      <![CDATA[ 
      project.setProperty("@{name}", "@{value}"); 
      ]]> 
     </script> 
    </sequential> 
</macrodef> 
1

後にプロパティ値を変更することができ、私は第一および第二の負荷のために異なるプレフィックスを使用することをお勧め。最初にロードとprefix属性firstに等しい。このプレフィックスを持つプロパティにアクセスすると、プロパティfoofirst.fooとしてアクセス可能になります。その後、プロパティファイルを保存して再度ロードしますが、今回は接頭辞を使用しません。適切な場所に変更されたプロパティが表示されます。

接頭辞を使用しないと、2番目の読み込みは何も行いません。これは、antがプロパティの上書きを防止するためです。他はすでにそれを指摘した。

5

あなたがメインのターゲット・ランタイムのプロパティを無視antcallタスクに新しいアリランタイムを呼び出すことができます - ちょうどあなたが新しいプロパティファイルを作成することができますinheritAll="false"

<target name="main"> 
    <property file="test.properties"/> 
    <echo>before :: ${modules}</echo> 

    <propertyfile file="test.properties"> 
     <entry key="modules" type="string" operation="+" value="foo" /> 
    </propertyfile> 

    <antcall target="second-runtime" inheritAll="false"/> 
</target> 

<target name="second-runtime"> 
    <property file="${status.path}/test.properties" /> 
    <echo>after :: ${modules}</echo> 
</target> 

antcall refrence

0

が含まれていることを確認してくださいプロパティを新しいファイルに保存します。

次の行にファイルの参照を指定します。

完了:

関連する問題