2013-04-18 3 views
6

org.apache.maven.plugins:maven-antrun-plugin을 사용하여 리소스를 복사하고 이름을 바꾸는 것은 쉽지만 personcal 규칙을 따르기 위해 와일드 카드 또는 기타 메카니즘을 사용하여 지능적으로이를 수행 할 수있는 방법이 있습니까? 예를 들어 리소스를 지능적으로 복사하기위한 Maven과 Ant 플러그인

나는 그 파일이있는 경우 :

  • ${project.artifactId}-${project.version}.swf
  • a.swf
  • b.swf
  • ...
  • z.swf
나는 복사 할 것

디렉토리에있는 모든 파일은 ${project.artifactId}-${project.version}.swf에서 foo.swf으로 바꿉니다. 내가 사용할 수 있습니다 알고

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

는 일이다하지만 복사 할 1000 개 파일이 때문에 경우 매우 지루한 될 것이라고 할 수있는 또 다른 편리한 방법이 ... 감사

답변

1

사용 받는다는 조립을 "dir" "formats/format", swf의 대다수를 복사하는 "fileSets/fileSet"및 다른 하나의 swf를 다른 파일로 복사하는 "files/file"의 어셈블리 디스크립터가있는 -plugin 이름.

+0

안녕하세요. 저는이 플러그인을 사용할 수 있다고 Google에서 보았습니다. 그러나이 플러그인을 사용하지 않기 때문에 Ant 플러그인을 사용하기로 결정했습니다 ^^.+1 어쨌든, 나는 가능한 한 빨리이 플러그인을 공부할 것입니다. –

+0

pom.xml에서 antrun을 볼 때마다 뭔가 잘못 됐음을 나타내는 좋은 징후가됩니다. –

15

개미 아십니까? 모든 Maven Ant 플러그인이 수행하는 작업은 나열한 작업으로 Ant를 호출하는 것입니다. 당신은 <taskdef>을 포함한 모든 개미 작업 등이 세트로 할 수있는 일을하는 것처럼 보이는 무엇

수행 할 수 있습니다

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

이는 ${project.build.directory}에 바로 아래에있는 모든 *.swf 파일을 복사를 (그리고 서브 디렉토리 없음)을 ${swf.output.location} 디렉토리에 추가하십시오. 당신은 파일 이름을로 찾으면해야하는 경우

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

, 당신은 Mappers을 사용할 수 있습니다 : 당신이 *.swf 파일의 전체 디렉토리 트리를 복사하려면 바로이 <include> 변경합니다.

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

이 전체 디렉토리 트리를 복사 한 디렉토리에있는 모든 파일을 평평하게됩니다 간단한 매퍼 패턴 화 된 매퍼 될 것이다. glob, 정규 표현식 및 스크립팅과 일치 할 수있는 매퍼가 있습니다.

<include>은 수행 할 파일을 선택하므로 매퍼가 아니며 selector입니다. 이것들은 너무 복잡 할 수 있으며, 정규 표현식이나 그 내용까지 이름에 따라 파일을 대조 할 수 있습니다.

내가 할 수있는 메이븐 플러그인이 없다는 것에 놀랐습니다. 내가 마지막으로이 작업을 수행하기 위해이 플러그인을 사용 확인

+0

흠.이 링크에 감사 드리며,'regexpselect'가 나를 구할 것이라고 생각합니다. maven에는'copy-resources' 목표가 있지만 파일 이름을 바꿀 수 없다고 생각합니다. Stevo Slavić가 제안한 것처럼, 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

관련 문제