2009-08-07 21 views
14

ファイルのディレクトリをコピーし、その中のいくつかの名前を変更したいと思います。 以下のスクリプトを実行すると、何もコピーされません。 以下のファイルのglobマッパーにコメントすると、ファイル名が変更されずにコピーされます。ANTコピー中にファイルの名前を変更する

ありがとうございました。 ジェームズ

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

答えて

10

それはそう、一つだけで '*' glob-mapper作品という。私がしようとするだろうregexp-mapper:「移動」、およびMnementhによって示されるように、正しいマッパータイプを使用して、回避策に頼っ

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

あなたの答えをありがとう。これは適切なタイプのマッパーです。 しかし、マッパーは一度に1つずつしか動作しません。私が2つをコメントアウトすると、もう1つは動作します。私はテストするためにそれらのそれぞれにそれらを必要とする - 最初の置換を試して、次に2番目の置換、とにかくコピーしていない場合(アイデンティティマッパー)。とにかくありがとうございます - これは参考にされています。 – tarling

14

<chainedmapper>

代わりに、<firstmatchmapper>を使用しなければならない最初から最後マッパーにチェーンに情報を渡します、中にすべてのマッパーを試みるであろう:ありがとう

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

非常に便利です、ありがとう! –

+0

良い解決策! 1つは、交換するアイテムが複数ある場合です。例えば。パスを考えてみましょう:PACKAGENAME \ blah \ foo \ PACKAGENAME。私が観察したのは、最初の名前変更のみが機能するということでした。私の大まかな回避策は、この移動を10回行うには単にループを使用することでした。醜いが、それは動作するようだ。 – John

4

はあなたの問題は、あなたが右のマッパーを選択しなかったということですhttp://ant.apache.org/manual/Types/mapper.html

(かなり古い質問が、私はちょうど見つけ:-)ほとんど同じ問題を探して)

:1が

参考に一致するまで、電源を入れ

関連する問題