2013-04-18 11 views
6

org.apache.maven.plugins:maven-antrun-pluginを使用してリソースをコピーして名前を変更するのは簡単ですが、ワイルドカードや他のマカニズムを使用して人格ルールに準拠させるためにインテリジェントな方法がありますか?例えばリソースをインテリジェントにコピーするMavenとAntプラグイン

私はそれらのファイルがある場合:

  • ${project.artifactId}-${project.version}.swf
  • a.swf
  • b.swf
  • ...
  • z.swf

を私がコピーしたいですディレクトリ内のこれらのファイルはすべて${project.artifactId}-${project.version}.swffoo.swfの名前に変更してください。それが仕事だが、私はコピーする1000個のファイルを持っている場合、それは非常に退屈になるので、これを行うには、別の便利な方法があり

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
     <executions> 
      <execution> 
      <id>copy-swf-files</id> 
      <phase>compile</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <target name="copy swf files to web project"> 
         <copy file="${project.build.directory}/${project.artifactId}-${project.version}.swf" tofile="${swf.output.location}/foo.swf" /> 
         <copy file="${project.build.directory}/a.swf" tofile="${swf.output.location}/a.swf" /> 
         <copy file="${project.build.directory}/z.swf" tofile="${swf.output.location}/z.swf" /> 
        </target> 
       </configuration>      
       </execution> 
      </executions> 
    </plugin> 

...おかげ

答えて

1

使用のmaven-アセンブリ:私は、私が使用することができます知っています"dir" "formats/format"のアセンブリ記述子を持つ-plugin、swfの大部分をコピーする "fileSets/fileSet"、およびそのswfを異なるファイルにコピーする "files/file"名。

+0

こんにちは。私はGoogleでこのプラグインを使用できることを知ったが、このプラグインを使用しないためにAntプラグインを使用することに決めた^^。+1とにかく、私はできるだけ早くこのプラグインを勉強します –

+0

pom.xmlでantrunが見えるときはいつでも何か間違ったことが起こっていることを示しています。 –

15

あなたはAntを知っていますか?すべてのMaven Antプラグインは、あなたがリストしたタスクでAntを呼び出しています。あなたは<taskdef>を含む任意のAntタスク、などあなたがファイルセットで行うことができますやっているように見える何

行うことができます。

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="*.swf"/> 
    </fileset> 
</copy> 

これは${project.build.directory}に直下すべて*.swfのファイルをコピーしますが(とサブディレクトリはありません)を${swf.output.location}ディレクトリにコピーします。あなたが*.swfファイルのディレクトリツリー全体をコピーしたい場合は、単に<include>を変更:

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE--> 
    </fileset> 
</copy> 

あなたはファイル名をのmungeする必要がある場合は、あなたがMappersを使用することができます。最も簡単なマッパーはフラット化マッパー次のようになります。

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE--> 
    </fileset> 
    <mapper type="flatten"/> 
</copy> 

これは、ディレクトリツリー全体をコピーして、1つのディレクトリにすべてのファイルを平らにします。グロブ、正規表現、さらにはスクリプトにマッチするマッパーがあります。

<include>は、selectorであり、マッパーではなく、処理するファイルを選択するためです。これらも非常に複雑なことがあり、正規表現やその内容の名前に基づいてファイルを照合することができます。

これを行うためのMavenプラグインはありません。私は最終的にこれを行うには、このプラグインを使用し[OK]を

+0

このリンクに感謝します。私は 'regexpselect'が私を救うと思います。 mavenには 'copy-resources'という目標がありますが、私たちはファイルの名前を変更することはできないと信じています。 StevoSlavićが提案したように、maven-assembly-pluginがありますが、まだ使用していません。 –

+0

@OlivierJ。私は実際にあなたの例でファイルの名前を変更するのを見ていませんでした。あるディレクトリから別のディレクトリにたくさんのファイルをコピーするだけです。ところで、あなたは 'regexp'マッパーを意味しましたか? –

+0

ちょうど最初のコピー行をチェックすると、私はtofile ".../foo.swf"に変更します –

2

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
     <id>copy-swf-files</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     <target name="copy swf files to web project">  
      <copy todir="${swf.output.location}"> 
       <fileset dir="${project.build.directory}" includes="*.swf"> 
        <filename regex="^sim-flex.*"/> 
       </fileset> 
      <mapper type="regexp" from=".*" to="sim.swf"/> 
      </copy> 
      <copy todir="${swf.output.location}" > 
       <fileset dir="${project.build.directory}" includes="*.swf"> 
        <not> 
         <filename regex="^sim-flex.*"/> 
        </not>         
       </fileset> 
      </copy> 
     </target> 
     </configuration>      
    </execution> 
</executions> 
</plugin> 
+0

このプラグインはファイルをリモートサーバにコピーできますか? – zygimantus

関連する問題