2012-01-16 16 views
2

だから、全体的な問題は、このです:カスタムantタスクからアリプロパティを上書き

我々は

<property file="prop1"/> 
<property file="prop2"/> 

PROP1は、のように見えるプロパティが含まれている複数のプロパティファイルを持っている:

mg.prop = ${mg2.prop} 

PROP2はMG2が含まれています。プロップ

mg2.prop = Hello 

同じファイルにあり、mg.propを問い合わせた場合、「Hello」が返されます。彼らは別々のファイルにしているので、これは動作しません(私はPROP2前PROP1をロードする必要があります!)

は、私は次のことを行い、カスタムantタスクを書いた:私は実行する場合

String resolved = resolveProperty(propertyName); 
getProject().setProperty(propertyName, resolved); 

log("Resolved property value = " + getProject().getProperty(propertyName)); 

直後、正しい値が得られます。しかし

私は

<echo message="${mg.prop}"/> 

を行う場合は、Antスクリプトで、それは私の元の値を示しています。

これを解決する方法についてのご意見はありますか?

答えて

1

は、ここで私はこれを解決することになった方法です。

すべてのプロパティファイルを1つに連結して、優先順位の逆順にしました。

私は2.propertiesと1.propertiesのものを上書きする3.propertiesからプロパティを望んでいたのであれば、私は次のようでした:

<concat destfile="resolved.properties"> 
    <fileset file="1.properties" /> 
    <fileset file="2.properties" /> 
    <fileset file="3.properties" /> 
</concat> 

<property file="resolved.properties"/> 
3

Antのマニュアルから:

「プロパティは不変です:ビルドの残りのためにそれをフリーズ最初のプロパティを設定し、誰でも、彼らはほとんど間違いなく変数ではありません。」

http://ant.apache.org/manual/Tasks/property.html

あなたの状況に応じて、「初めて線のみ含まないを取ることloadpropertiesとフィルタ・チェーンを使用して、二回ロードPROP1 で何をしたい{MG2を達成することができるかもしれません.prop} "となり、2回目の行にはにはの行しか含まれません。私は、カスタムAntタスクをturfed -

http://ant.apache.org/manual/Tasks/loadproperties.html http://ant.apache.org/manual/Types/filterchain.html#linecontains

+0

おかげラッセル - 私は、手動でこれを見ました私はちょうどカスタムタスクがそれを解決できると思った:)間違って、明らかに。私は別の方法で解決しました - 下記を参照してください。 –

1

ます。また、値をリセットするためにant-contribvar taskを使用することができます。ドキュメントから

次の例では、設定されたプロパティを示し、エコー、設定を解除し、 リセット:

<property name="x" value="6"/> 
<echo>${x}</echo> <!-- will print 6 --> 
<var name="x" unset="true"/> 
<property name="x" value="12"/> 
<echo>${x}</echo> <!-- will print 12 --> 
関連する問題