2009-08-07 18 views
14

Chciałbym skopiować katalog plików i zmienić niektóre z nich w procesie. Po uruchomieniu skryptu poniżej nic nie kopiuje. Jeśli skomentuję mapowanie globalne w pliku poniżej, pliki zostaną skopiowane (bez zmiany nazwy).Zmiana nazwy plików podczas kopiowania ANT

Dzięki za pomoc. James

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

Odpowiedz

10

Wydaje się, że glob-mapper działa tylko z jednej '*'. Chciałbym spróbować regexp-mapper:

<mapper type="regexp" from="(.*)PACKAGENAME(.*)" to="\1${package.name}\2"/> 
<mapper type="regexp" from="(.*)GAMENAME(.*)" to="\1${game.name}\2"/> 
+0

Dzięki za odpowiedź. Jest to odpowiedni rodzaj mappera do użycia. Jednak twórcy map chcą pracować tylko jeden po drugim - jeśli skomentuję dwóch z nich, drugi będzie działał. Potrzebuję ich do przetestowania - spróbuj najpierw wymienić, a potem drugi, jeśli nie kopiować, i tak (program odwzorowujący tożsamość). Dzięki i tak - to było pomocne. – tarling

14

uciekają się do obejścia, używając „Move” i odpowiedni rodzaj odwzorowujący jako wskazaną przez Mnementh. Dzięki

<?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> 
+0

Bardzo przydatne, dzięki! –

+0

Dobre rozwiązanie! Jedną rzeczą, która wydaje się nie działać, jest to, że masz wiele przedmiotów do zastąpienia. Na przykład. rozważ ścieżkę: PACKAGENAME \ blah \ foo \ PACKAGENAME. Zauważyłem tylko, że działa tylko pierwsza zmiana nazwy. Moje proste obejście polega na użyciu pętli , aby wykonać ten ruch 10 razy. Brzydki, ale wydaje się, że działa. – John

4

Twoim problemem jest to, że nie wybrać odpowiedni mapowania: <chainedmapper> będzie przekazywać informacje w łańcuchu od pierwszego do ostatniego elementu odwzorowującego

Zamiast, <firstmatchmapper> powinien być stosowany, który będzie próbował wszystkich twórców map w obracać, dopóki jeden z meczy

referencyjny: http://ant.apache.org/manual/Types/mapper.html

(dość stare pytanie, ale ja po prostu znaleźć szukanego przez prawie ten sam problem :-))