2009-05-06 15 views
63

設定されていない(つまりプロパティファイルで定義されていないため自動的にデフォルトにする)条件でAntプロパティを設定する方法がわかりません。Antプロパティが設定されていない場合にのみ設定する方法

はこれまでのところ、私は次のコードを持っている:

<condition property="core.bin" value="../bin"> 
    <isset property="core.bin"/> 
</condition> 

をしかし、これは唯一の値は<property>タグで定義されている場合に動作するようです。

現在設定されていない場合、条件付きでプロパティを初めて設定する方法は誰にも分かりますか?

答えて

106

property-taskでプロパティを設定できます。プロパティーがすでに設定されている場合、プロパティーは不変であるため、値は変更されません。

しかし、あなたはまた、あなたの状態では「ない」含めることができます。

<condition property="core.bin" value="../bin"> 
    <not> 
     <isset property="core.bin"/> 
    </not> 
</condition> 
58

Antはデフォルトでこれを行います。プロパティがすでに設定されている場合それを再度設定しても効果はありません。

<project name="demo" default="demo"> 
    <target name="demo" > 
     <property name="aProperty" value="foo" /> 
     <property name="aProperty" value="bar" /> <!-- already defined; no effect --> 
     <echo message="Property value is '${aProperty}'" /> <!-- Displays 'foo' --> 
    </target> 
</project> 

/c/scratch> ant -f build.xml 
Buildfile: build.xml 

demo: 
    [echo] Property value is '${aProperty}' 

BUILD SUCCESSFUL 
Total time: 0 seconds 
/c/scratch> ant -f build.xml 
Buildfile: build.xml 

demo: 
    [echo] Property value is 'foo' 

BUILD SUCCESSFUL 

プロパティを再定義することはできません提供します。これを行うには、variable task from ant-contribのようなものを使用する必要があります。

+0

。次の例の最初のエコーは "Ha1"を出力し、2番目のエコーは "Ha2"を出力します。\t \t \t \t \t <エコーメッセージ= "へdeploy.root.dir設定:$ {deploy.root.dir}"/> \t \t <プロパティ名=" デプロイ.root.dir "value =" Ha2 "/> \t Denis

+1

私はあなたが間違っていると思います。 Antのドキュメントでは、これは非常に明確です。私はあなたの例を実行できませんでした(Ifタスクはどこに定義されていますか?しかし、 <プロパティ名= "p"値= "1" /> <プロパティ名= "p"値= "2" /> <エコーメッセージ= "$ {p}" /> は、最初の値1を与えます。カスタムタスクを書くことでこれを行うことは可能ですが、Antのプロジェクトモデルを直接変更するだけです。 –

+0

私のコードをターゲットブロックに入れてみてください – Denis

2

Antのプロパティは不変です。定義した後、変更することはできません。

しかし、Ant Contribパッケージはvariableタスクを提供します。これはプロパティのように機能しますが、値は変更および設定解除できます。 variable task documentationから Exmaple:

<var name="x" value="6"/> 
    <if> 
     <equals arg1="${x}" arg2="6" /> 
     <then> 
      <var name="x" value="12"/> 
     </then> 
    </if> 
    <echo>${x}</echo> <!-- will print 12 --> 
6

あなたが欲しいものを行う最も簡単な方法:

<if> 
    <not> 
     <isset property="your.property"/> 
    </not> 
    <then> 
     <property name="your.property" value="your.value"/> 
    </then> 
</if> 
2

以内に「他」を使用してのサポートがあります:あなたの正確な目的を果たすためにhttps://ant.apache.org/manual/Tasks/condition.htmlが。

The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Apache Ant 1.6.3 

そうに変更します。これは真実ではありません

<condition property="core.bin" else="../bin"> 
    <isset property="core.bin"/> 
</condition> 
関連する問題