2009-08-07 18 views
14

Ich möchte ein Verzeichnis von Dateien kopieren und einige von ihnen dabei umbenennen. Wenn ich das Skript unten ausführen, kopiert nichts. Wenn ich die Glob Mapper in der Datei unten kommentieren, werden die Dateien kopiert (ohne die Umbenennung)Umbenennen von Dateien während der ANT-Kopie

Danke für jede Hilfe. 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> 

Antwort

10

Es scheint, dass die glob-mapper funktioniert nur mit einem '*'. Ich würde versuchen, die regexp-mapper:

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

Danke für Ihre Antwort. Das ist die richtige Art von Mapper. Allerdings wollen die Mapper nur einzeln arbeiten - wenn ich zwei von ihnen auskommentiere, wird der andere funktionieren. Ich brauche sie zu jedem von ihnen zu testen - versuchen Sie die erste ersetzen, dann die zweite ersetzen, wenn nicht sowieso kopieren (die Identity Mapper). Danke trotzdem - das war hilfreich. – tarling

14

zu einer Vermeidung des Problems umsortiert, „move“, und die richtige Mapper Typ verwendet, wie durch Mnementh angegeben.

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

Sehr nützlich, danke! –

+0

Gute Lösung! Eine Sache, die nicht zu funktionieren scheint, ist, wenn Sie mehrere Elemente zu ersetzen haben. Z.B. Betrachte den Pfad: PACKAGENAME \ blah \ foo \ PACKAGENAME. Was ich beobachtete war, dass nur das erste Umbenennen funktioniert. Mein grober Workaround war, einfach eine Schleife zu verwenden, um diese Bewegung 10 mal zu machen. Hässlich, aber es scheint zu funktionieren. – John

4

Ihr Problem ist, dass Sie nicht das Recht Mapper gewählt haben: <chainedmapper> Informationen in Kette vom ersten bis zum letzten Mapper

Stattdessen passieren sollte <firstmatchmapper> verwendet werden, die alle Mapper versuchen wird drehen, bis ein

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

(eine ganz alte Frage, aber ich fast das gleiche Problem nur gefunden entsprechend :-))