2009-08-07 18 views
14

Me gustaría copiar un directorio de archivos y renombrar algunos de ellos en el proceso. Cuando ejecuto el script a continuación, nada se copia. Si comento los mapeadores glob en el archivo a continuación, los archivos se copian (sin cambiar el nombre)Cambiar el nombre de los archivos durante la copia ANT

Gracias por cualquier ayuda. 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> 

Respuesta

10

Parece que los glob-mapper funciona sólo con un '*'. Me gustaría probar el regexp-mapper:

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

Gracias por su respuesta. Ese es el tipo correcto de mapeador para usar. Sin embargo, los cartógrafos solo quieren trabajar uno a la vez; si hago un comentario con dos de ellos, el otro funcionará. Los necesito para que cada uno de ellos sea probado: pruebe el primer reemplazo, luego el segundo reemplace, si no, copie de todos modos (el mapeador de identidad). Gracias de todos modos, esto ha sido útil. – tarling

14

recurrió a una solución, el uso de "movimiento", y el tipo asignador, indicada por Mnementh. Gracias

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

Muy útil, gracias! –

+0

¡Buena solución! Una cosa que no parece funcionar es si tiene varios elementos para reemplazar. P.ej. considere la ruta: PACKAGENAME \ blah \ foo \ PACKAGENAME. Lo que observé fue que solo funciona el primer cambio de nombre. Mi solución aproximada fue simplemente usar un bucle para hacer este movimiento 10 veces. Feo, pero parece funcionar. – John

4

Su problema es que no eligió el asignador derecha: <chainedmapper> pasará la información en la cadena desde la primera hasta la última asignador

En cambio, <firstmatchmapper> se debe utilizar, que tratará todos los creadores de mapas en girar, hasta que uno coincide con

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

(bastante una vieja pregunta, pero me acaba de encontrar la búsqueda de casi el mismo problema :-))

Cuestiones relacionadas