2009-08-07 6 views
14

J'aimerais copier un répertoire de fichiers et renommer certains d'entre eux dans le processus. Lorsque je lance le script ci-dessous, rien ne se reproduit. Si je commente les glob mappers dans le fichier ci-dessous, les fichiers sont copiés (sans le renommer)Renommer des fichiers pendant la copie ANT

Merci pour toute aide. 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> 

Répondre

10

Il semble que les glob-mapper fonctionne uniquement avec un '*'. Je voudrais essayer la regexp-mapper:

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

Merci pour votre réponse. C'est le bon type de mapper à utiliser. Cependant, les mappeurs ne veulent travailler qu'un seul à la fois - si je commente deux d'entre eux, l'autre fonctionnera. J'ai besoin d'eux à chacun d'eux pour être testé - essayez le premier remplacement, puis le second remplacer, sinon copier de toute façon (le mappeur d'identité). Merci quand même - cela a été utile. – tarling

14

à une solution de contournement fait appel, en utilisant « déplacer », et le type de mappeur correct comme indiqué par Mnementh. Merci

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

Très utile, merci! –

+0

Bonne solution! Une chose qui ne semble pas fonctionner est si vous avez plusieurs éléments à remplacer. Par exemple. Considérez le chemin: PACKAGENAME \ blah \ foo \ PACKAGENAME. Ce que j'ai observé était que seulement le premier rename fonctionne. Ma solution de contournement brut était d'utiliser simplement une boucle pour faire ce mouvement 10 fois. Laid mais ça a l'air de marcher. – John

4

Votre problème est que vous n'avez pas choisi le droit Mapper: <chainedmapper> passera l'information dans la chaîne de la première à la dernière mappeur

Au lieu de cela, <firstmatchmapper> doit être utilisé, ce qui va essayer tous les cartographes en tourner, jusqu'à ce qu'un correspond

Référence: http://ant.apache.org/manual/Types/mapper.html

(tout à fait une vieille question, mais je viens de trouver la recherche de presque le même problème :-))

Questions connexes