6

私の質問は、このスレッドの続きです: Ant: 同じファイルセットを複数の場所にコピーする

私はマッパーに不慣れです。誰か (carej?) がマッパーを使用してこれを行う例を親切に共有できますか? ここに私がしようとしているものがあります:

親フォルダー
    |----child1_folder
    | | |----ファイル
    | | |----config.file
    | | |----data.txt
    |----child2_folder
    |----child3_folder
    .
    .
    .
    |----childn_folder

ant-contrib を使用するオプションがありません (申し訳ありませんが、ant の場所や taskdesf は私の管理下にありません)。そのため、不確実な数のフォルダーをループする方法がわかりません。

私に対する制限:

  1. child1_folder の名前しか知らない (他の子の名前は知らない)
  2. 他の子供の数は不明です
  3. files各子フォルダーの下にフォルダーを作成することが期待されています(コピーしない場合は別のタスクを介して)。

これが私が試みていたものです(現在、単一のファイルを試みています。これが機能し始めたら、追加のマッパーで拡張します):

<copy todir="/tmp/parent_folder" verbose="true">
    <fileset dir="/tmp/parent_folder">
        <include name="*/files/config.file"/>
    </fileset>
    <mapper type="glob" from="*/files/config.file" to="*/files/config.file"/>
</copy>

と言いskipped - don't know how to handle it続け、続いてNo sources found..

前もって感謝します、 Parag Doke

別の (おそらく?) 関連する質問: Using mapper & fileset to copy files into a different subdirectory?

4

1 に答える 1

3

1 つの方法の例を次に示します。主な機能はenablemultiplemappings、コピー タスクでのの使用とscriptmapper、ターゲット ディレクトリの反復処理を処理することです。マッパー チェーンを使用して、scriptmapper に提供されるソースを、コピーするファイルのターゲット ディレクトリからの相対パスにすることができます。

<property name="src.dir" value="child1_folder" />

<dirset dir="parent_folder" id="target.dirs">
    <include name="*" />
    <exclude name="${src.dir}" />
</dirset>

<copy todir="parent_folder" enablemultiplemappings="yes">
    <fileset dir="parent_folder">
        <include name="${src.dir}/**"/>
    </fileset>
    <chainedmapper>
        <globmapper from="${src.dir}/*" to="*" />
        <scriptmapper language="javascript">
        <![CDATA[
            // Obtain a reference to the dirset
            var dirSet = project.getReference( "target.dirs" );

            // Now get matching dirs.
            var ds = dirSet.getDirectoryScanner( project );
            var includes = ds.getIncludedDirectories( );
            for ( var i = 0; i < includes.length; i++ )
            {
                self.addMappedName( includes[i] + "/" + source );
            }
        ]]>
        </scriptmapper>
    </chainedmapper>
</copy>

コピー タスクの複数のマッピングは、バージョン 1.6 以降の Ant にあります。

于 2011-05-25T08:58:42.303 に答える