2009-09-04 14 views
3

は、私はアリに新たなんだ、と私はデフォルトのターゲット以外のものが使用されている場合は、ファイル名を必要としたいので、呼び出し構文は、このようなものになるだろう:Antに対してコマンドライン引数をオプションで要求するにはどうすればよいですか?

ant specifictarget -Dfile=myfile 

私はant contrib packageを使用しています私の追加機能を提供するので、私はこれを持っている:

<if> 
    <equals arg1="${file}" arg2="" /> 
    <then> 
     <!-- fail here --> 
    </then> 
</if> 

私の考えは、ファイルが指定されなかった場合、それは空の文字列に等しいかもしれないということです。明らかに、これはうまくいかず、Googleのマニュアルやマニュアルの正しい構文は見つかっていません。

どのような構文を使用する必要がありますか?

答えて

6

あなたは本当にcontribパッケージを必要としません。これは、if/unlessやdependなどの組み込みのant機能を使用するとより便利です。以下を参照してください:

<target name="check" unless="file" description="check that the file property is set" > 
    <fail message="set file property in the command line (e.g. -Dfile=someval)"/> 
</target> 

<target name="specifictarget" if="file" depends="check" description=" " > 
    <echo message="do something ${file}"/> 
</target> 
+3

同じことを書くつもりだったのです:-)。さらに短いバージョンは、 "<ファイル>メッセージ= 'ファイルプロパティを設定...' />"がなければ<失敗します " –

+0

+1ありがとう、デイヴィッドとマット。私は短いバージョンを使用して終了しました。 –

+0

皆さん、_specifictarget_という名前の2番目のターゲットに_if_属性を追加する必要がありますか? – Victor

3

あなたは正しい考えを持っています。 The

は、Antのプロパティをコマンドラインから設定します。実際に必要なのは、デフォルト値の

<property name="file" value=""/> 

です。そうすることで、fileが指定されていなければ、空の文字列と等しくなります。

2

性質はAntの中で変更可能ではありませんので、あなたがこれを追加することができますが:それはすでに、コマンドラインで設定されていない場合

<property name="file" value="" />

これは、空の文字列にプロパティfileを設定します。あなたの平等テストはあなたの意図どおりに動作します。

1

代わりに、プロパティの置換を実行できないときにantが実際のテキストを吐き出すので、エスケープすることができます。

 <if> 
     <equals arg1="${file}" arg2="$${file}" /> 
     <then> 
     <echo>BARF!</echo> 
     </then> 
    </if> 
関連する問題