Ant: скопировать один и тот же набор файлов в несколько мест - продолжение - PullRequest
6 голосов
/ 25 мая 2011

Мой вопрос в продолжении этой темы: Муравей: скопировать один и тот же набор файлов в несколько мест

Я новичок в мапперах. Может ли кто-нибудь (carej?) Любезно поделиться примером использования картографа для этого? Вот что я пытаюсь:

parent_folder
    |----child1_folder
    |         |----files
    |                |----config.file
    |                |----data.txt
    |----child2_folder
    |----child3_folder
    .
    .
    .
    |----childn_folder

У меня нет возможности использовать ant-contrib (извините ... местоположение муравья или любое другое задание не находятся под моим контролем). Так что я не знаю, как перебрать неопределенное количество папок.

Ограничения на меня:

  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..

Спасибо заранее, Параг Доке

Еще один (возможно?) Связанный с этим вопрос: Использование mapper & fileset для копирования файлов в другой подкаталог?

1 Ответ

3 голосов
/ 25 мая 2011

Вот пример одного способа.Ключевыми функциями являются использование enablemultiplemappings в задаче копирования и 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>

Несколько сопоставлений в задаче копирования были в Antс версии 1.6.

...