31

build.xmlこのタスクを使用し<copy>てさまざまなxmlファイルをコピーするアリがいます。フィルタリングを使用して、build.propertiesファイルからプロパティをマージします。各環境(dev、stage、prod)には、build.propertiesその環境の構成を格納する異なるものがあります。

時々、ファイルの更新を必要とするSpringXMLまたは他の構成ファイルに新しいプロパティを追加しbuild.propertiesます。

から欠落しているプロパティがある場合、antをすばやく失敗させたいですbuild.properties。つまり、生の@...@トークンが生成されたファイルに組み込まれた場合、ビルドを終了して、ユーザーが1つ以上のプロパティをローカルのbuild.propertiesに追加する必要があることを認識できるようにします。

これは組み込みのタスクで可能ですか?ドキュメントに何も見つかりませんでした。カスタムantタスクを作成しようとしていますが、おそらく自分で労力を惜しまないでしょう。

ありがとう

4

5 に答える 5

99

特定のプロパティを探している場合は、fail タスクを until 属性とともに使用できます。次に例を示します。

<fail unless="my.property">Computer says no. You forgot to set 'my.property'!</fail>

詳細については、Ant の失敗タスクのドキュメントを参照してください。

于 2009-03-17T11:31:28.093 に答える
20

LoadFileタスクとmatch条件の組み合わせを使用して、ant 1.7 で実行できます。

<loadfile property="all-build-properties" srcFile="build.properties"/>
<condition property="missing-properties">
    <matches pattern="@[^@]*@" string="${all-build-properties}"/>
</condition>
<fail message="Some properties not set!" if="missing-properties"/>
于 2008-11-14T21:33:03.410 に答える
4

<property file="${filter.file}" prefix="filter">実際にプロパティを Ant にロードするためにを使用することを提案するつもりでしfailたが、それらのいずれかが設定されていない場合は、問題を間違って解釈していたと思います (指定されたプロパティが設定されていない場合に失敗したかったということです)。プロパティ ファイル内)。

あなたの最善の策は<exec>、(開発プラットフォームに応じて)「@」文字のgrepを実行し、見つかった出現回数にプロパティを設定することだと思います。正確な構文はわかりませんが...

<exec command="grep \"@\" ${build.dir} | wc -l" outputproperty="token.count"/>
<condition property="token.found">
    <not>
        <equals arg1="${token.count}" arg2="0"/>
    </not>
</condition>
<fail if="token.found" message="Found token @ in files"/>
于 2008-10-22T17:10:39.083 に答える
0

if exec command is deprecated in your version of ant you can use redirectors, something like:

<exec executable="grep">
  <arg line="@ ${build.dir}"/>
  <redirector outputproperty="grep.out"/>
</exec>
<exec executable="wc" inputstring="${grep.out}">
  <arg line="-l"/>
  <redirector outputproperty="token.found"/>
</exec>

to create the token.found property

<condition property="token.found">
    <not>
        <equals arg1="${token.count}" arg2="0"/>
    </not>
</condition>
<fail if="token.found" message="Found token @ in files"/>

for the conditonal

于 2008-11-14T20:53:47.000 に答える