3

私は、適用タスクを使用してファイルのグループに対してスクリプトを実行するantタスクを持っています。 mkdir -p a/{b,c,d,e}/fオプションのパス引数をantに渡す

通常(私は引数を渡さない場合)、私はすべてのfの上で実行するように蟻のようになる:

私はこのような何かのディレクトリ構造の結果を持っています。 つまり、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のみを処理し、他は処理しません。

私は引数を渡す方法を説明するthis SO postを読みました。propertiesconditionalsに関するantのドキュメントを見てきました。しかし、私はまだ働く方法でそれらをまとめることができません。

また、私はこのような引数を呼びかけSOた上からの提案のいずれかを使用する必要はありません:

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

私は、任意のfooためant mytask -foo valueoffooとしてそれを呼び出すことができるようにしたいです。

ありがとうございました。


私は以下のマーティン・クレイトンの提案をしようとしたようなコードを持っている:

<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の代わりにパターンセットを使用しますが、同じように動作するはずです。

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

+0

あなたの例のAntコマンドラインには、ターゲット 'mytask'と任意の' foo'が記述されていますが、サンプルビルドファイルはfooというターゲット用です。あなたはおそらく任意のサブパスを渡す必要がありますか?それとも、任意のディレクトリレベルですか? –

+0

@martin clayton:ああ、申し訳ありませんが、あなたは正しいですが、混乱しています。私は自分の質問を修正した。 – yarian

+0

したがって、デフォルトでは、インクルードパターンは '*/*/f'です - コマンドラインからオーバーライドできる部分はありますか? '$ {foo}'部分、または中間の '*' - あるいはその両方でしょうか? –

答えて

2

これは、コマンドラインの構文が若干異なりますが、 というプロパティを使用して '上書き'できます。このような

まず、ビルドファイルでは、プロパティfooからあなたのファイルセットやdirsetを構築し、 何か:

<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は、ビルドファイル内のものが使用されないようにします。

+0

上記の私の編集した質問を参照してください。 – yarian