3

適用タスクを使用してファイルのグループに対してスクリプトを実行するantタスクがあります。

私はこのようなものの結果としてのディレクトリ構造を持っています: mkdir -p a/{b,c,d,e}/f

f通常(引数を渡さない場合)、antをすべてのsで実行したいと思います。つまり、を呼び出した場合、次ant mytaskの処理を行う必要がありますa/b/f, a/c/f, a/d/f, a/e/f。これは、applyとpatternsetを使用してすでに機能します。

ただし、と呼ばれるオプションの引数を渡すとfoo、でスクリプトを呼び出すだけで済みますa/foo/f

したがって、私が電話した場合ant mytask -foo b、それは他のものではなく、のみ処理する必要がa/b/fあります。

引数を渡す方法を説明しているこのSOの投稿を読み、プロパティ条件に関するantのドキュメントを確認しました。しかし、私はまだそれらをうまく機能する方法でつなぎ合わせることができません。

また、次のような議論を求めた上記のSOからの提案の1つを使用したくありません。

<arg value="${arg0}"/>
<arg value="${arg1}"/>

ant mytask -foo valueoffoo任意のと呼べるようにしたいと思いますfoo

ありがとう。


私は以下のマーティン・クレイトンの提案を試し、次のようなコードを持っています:

<target name="mytask">
  <property name="foo" value="*" />
  <apply executable="perl">
    <arg value="somescript"/>
    <dirset id="them" dir="a">
      <include name="${foo}/*/f" />
    </dirset>
  </apply>
</target>

上記は私が望むことをします。

注1:実際のコードでは、dirsetの代わりにpatternsetを使用していますが、同じように機能するはずです。

注2:私の最初の質問で、ディレクトリ構造はであると言いましたa/{b,c,d,e}/f。実際にはもう少し複雑なので、*上記のインクルードに含まれています。関連性がないと思われたので、最初はそれを省略しました。

4

1 に答える 1

2

これは、コマンドライン構文が少し異なりますが、プロパティ'override'を使用して実行できます。

fooまず、ビルドファイルで、次のようなプロパティからファイルセットまたはディレクトリセットを作成します。

<property name="foo" value="*" />
<dirset id="them" dir="a">
    <include name="${foo}/f" />
</dirset>

これにより、デフォルトの動作が得られます。そのすべてのサブディレクトリを処理するとa、それ自体にサブディレクトリがありfます。

ここで、Antを次のように実行すると、次のようになります。

ant -Dfoo=d

ディレクトリのみa/d/fが処理されます。

これが機能するのは、Antプロパティが変更可能ではないためです(通常はとにかくそうではありません)。したがって、のコマンドライン定義によりfoo、ビルドファイル内のプロパティが使用されなくなります。

于 2011-07-25T15:47:37.290 に答える