2

私は、fileset(本当にそうしなければならない場合を除いて)長い間解決策に頼る必要なしに、Antにディレクトリを含めるようにしようとしています。おそらく私は明らかな何かを見逃しています。

<copy todir="targetdir">
    <fileset dir="@{source}">
        <include name="**/somedir/" />
    </fileset>
</copy>

がどこにあるかを明示的に知らずに、すべてのサブディレクトリを含むの内容を取得しようとしています。somedir@{source}/path/to/somedirsomedir

したがって、たとえばsomedir2つのサブディレクトリがsub1ありsub2、目標は、これら2つのディレクトリtargetdir(すべてのコンテンツを含む)に配置することです。

サブディレクトリ内のディレクトリ構造が削除されるため、全体をフラット化することはできません。上記の現在のソリューションでは、コンテンツだけでなく、をtargetdir含むことができます。somedir

理論的には、ファイルセットにさまざまなパスを持つ複数のインクルードがあり、すべて同じコピーが必要になる可能性があるため、後でディレクトリを移動したくありません。

4

1 に答える 1

2

copy要素内のマッパーを使用してこれを行うにはいくつかの方法があります。最も簡単な方法は、カットdirsマッパーを使用することですが、パスからカットするdirsの量を知る必要があります。正規表現マッパーを使用して、主要なdirを削除することもできます。

<regexpmapper from="^(([^/]*/)+?)/somedir/(.*)$$" to="\2"/>

上記はテストされていませんが、somedirの前とsomedirの後のビットの2つのキャプチャグループを定義する必要があり、replaceは2番目のグループにすぎません。

于 2012-07-09T21:18:23.963 に答える