Переименование файлов во время копирования ANT - PullRequest
14 голосов
/ 07 августа 2009

Я хотел бы скопировать каталог файлов и переименовать некоторые из них в процессе. Когда я запускаю скрипт ниже, ничего не копируется. Если я прокомментирую преобразователи глобуса в файле ниже, файлы будут скопированы (без переименования)

Спасибо за любую помощь. Джеймс

<?xml version="1.0" ?>
<project name="Create project structure" default="main">
  <target name="main" description="Copy template files to project folder">
    <echo>Copying template files to project folder</echo>
    <copy todir="${project.dir}" verbose="true" overwrite="true">
      <fileset dir="${shared.files}/templateproject" excludes=".svn"/>
      <mapper>
        <chainedmapper>
          <mapper type="glob" from="*PACKAGENAME*" to="*${package.name}*"/>
          <mapper type="glob" from="*GAMENAME*" to="*${game.name}*"/>
          <mapper type="identity"/>
        </chainedmapper>
      </mapper>
    </copy>
  </target>
</project>

Ответы [ 3 ]

14 голосов
/ 07 августа 2009

Прибегает к обходному пути, используя «перемещение» и правильный тип картографа, как указано Mnementh. Спасибо

<?xml version="1.0" ?>
<project name="Create project structure" default="main">
    <target name="main" description="Copy template files to project folder">
    <echo>Copying template files to project folder</echo>
    <copy todir="${project.dir}" verbose="true" overwrite="true">
        <fileset dir="${shared.files}/templateproject" excludes=".svn" />
    </copy>
    <move todir="${project.dir}">
        <fileset dir="${project.dir}" />
        <mapper>
        <mapper type="regexp"
                from="(.*)PACKAGENAME(.*)" to="\1${package.name}\2" />
        <mapper type="regexp"
                from="(.*)GAMENAME(.*)" to="\1${game.name}\2" />
        </mapper>
    </move>
    </target>
</project>
11 голосов
/ 07 августа 2009

Кажется, что glob-mapper работает только с одним '*'. Я бы попробовал regexp-mapper :

<mapper type="regexp" from="(.*)PACKAGENAME(.*)" to="\1${package.name}\2"/>
<mapper type="regexp" from="(.*)GAMENAME(.*)" to="\1${game.name}\2"/>
5 голосов
/ 02 сентября 2011

Ваша проблема в том, что вы не выбрали правильный преобразователь: <chainedmapper> будет передавать информацию в цепочке от первого до последнего преобразователя

Вместо этого следует использовать <firstmatchmapper>, который будет пробовать все мапперы по очереди, пока один из них не совпадет

Ссылка: http://ant.apache.org/manual/Types/mapper.html

(довольно старый вопрос, но я только что нашел поиск почти такой же проблемы: -))

...