2

Ant ターゲットでは、さらなるアクション (コピー、フィルタリングなど) に含まれるディレクトリのリストを含むプロパティを取得します。次のようになります。

directories=dir1, dir2, dir3

このリストを、これらのディレクトリ内のすべてのファイルを選択するファイルセットまたはパターンセットに変換する方法が必要です。

スクリプトを使用してパターン文字列を生成し、それを「含める」または「除外する」で使用できることは知っていますが、スクリプトを回避する方法はありますか?

4

3 に答える 3

2

Ant 1.9.4 の時点で、ディレクトリが兄弟でなくても、その機能を提供する新しい構造<multirootfileset>があることに注意してください。

<multirootfileset basedirs="${directories}" includes="**/*">
于 2015-06-28T17:34:06.370 に答える
1

antcontribpropertyregexタスクを使用して、コンマ区切りのリストをファイルセットに適したワイルドカードに変換するのはどうですか?

<property name="directories" value="dir1, dir2, dir3" />

<property name="wildcard" value="${file.separator}**${file.separator}*" />
<propertyregex property="my_pattern"
               input="${directories}" 
               regexp=", " 
               replace="${wildcard}," />

この時点で、次のようになります。

my_pattern=dir1/**/*,dir2/**/*,dir3

これをさらに接尾辞付きのワイルドカードとともに使用して、完全なファイルセットを取得できます。

<fileset dir="." id="my_fileset" includes="${my_pattern}${wildcard}" />

(厄介なの${wildcard}は、UNIXファイルシステムとWindowsファイルシステム間の移植性を確保する/**/*ことです。純粋なUNIXの場合に使用できます。)

于 2010-10-03T21:52:28.610 に答える
0

このようなものが動作するはずです:

<dirset includes="${directories}"/>

はい、そうでdirsetはありませんfileset。ただし、それで十分な場合もあれば、ant-contribのfororを使用して、ターゲット内のディレクトリを反復処理することもできます。foreachdirset に基づいて ResourceCollection を定義することもできます。「さらなるアクション」が期待されるものを知ることは役立つかもしれません。

しかし、これはやり過ぎのように感じます...

于 2010-08-04T06:59:53.370 に答える