2009-08-07 18 views
14

Vorrei copiare una directory di file e rinominarne alcuni nel processo. Quando eseguo lo script di seguito, non vengono copiate. Se commento i mapper glob nel file sottostante, i file vengono copiati (senza la ridenominazione)Rinominare i file durante la copia ANT

Grazie per qualsiasi aiuto. 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> 

risposta

10

Sembra, che i glob-mapper funziona solo con un '*'. Vorrei provare il regexp-mapper:

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

Grazie per la risposta. Questo è il giusto tipo di mapper da usare. Tuttavia, i mappatori vogliono lavorare solo uno alla volta - se commento due di questi, l'altro funzionerà. Li ho bisogno di ognuno di loro per essere testato - prova la prima sostituzione, poi la seconda sostituisce, se non copia comunque (il mappatore di identità). Grazie comunque: è stato utile. – tarling

14

ricorso a una soluzione alternativa, l'utilizzo di "muovere", e il tipo di mapping corretto come indicato dal Mnementh. Grazie

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

Molto utile, grazie! –

+0

Buona soluzione! Una cosa che sembra non funzionare è se hai più elementi da sostituire. Per esempio. considera il percorso: PACKAGENAME \ blah \ foo \ PACKAGENAME. Quello che ho osservato è che solo il primo rinominare funziona. La mia soluzione alternativa era quella di utilizzare semplicemente un ciclo per eseguire questa operazione 10 volte. Brutto ma sembra funzionare. – John

4

tuo problema è che non si è scelto il diritto mapper: <chainedmapper> passerà le informazioni nella catena dalla prima all'ultima mapper

Invece, <firstmatchmapper> dovrebbe essere usato, che cercherà tutti i mapper in girare, fino a quando uno corrisponde

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

(piuttosto una vecchia questione, ma ho appena trovati cercando per quasi lo stesso problema :-))

Problemi correlati