2012-10-01 4 views
8

웹 응용 프로그램을 배포 할 때 UI 자원의 일부 변수를 업데이트하고 일부 자산의 압축을 풀고 일부 파일을 연결해야합니다. 현재이 작업은 앤트 작업을 통해 이루어집니다. 나는 파일이 아직 대상 디렉토리에 복사되지 않았기 때문에 전쟁이 패키지되기 전에 메이븐 빌드 단계에서 개미 작업을 실행 하시겠습니까?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>prepare-package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

실패 ... 이런 식으로 뭔가를 사용하여 받는다는 빌드 과정에서이 작업을 실행하기 위해 노력하고있어. 단계를 "패키지"로 설정하면 앤트 작업이 잘 실행되고 모든 파일이 생성/수정되지만 앤트 대상을 실행하기 전에 .war 파일이 이미 빌드 된 것처럼 도움이되지 않습니다.

기본적으로 준비 패키지 단계의 끝 부분에서 내 ant 대상을 실행해야합니다.

비록 내가을 보았 더라면 더 세분화 된 목표를 antrun 플러그인에 노출시키는 방법을 연습 할 수 없습니다.

아이디어가 있으십니까?

+0

대신 "순수한"메이븐 플러그인을 사용하여 이러한 개미 작업을 수행 한 적이 있습니까? – maba

답변

17

내 의견에 대한 답변을 얻지 못했기 때문에 maven-antrun-plugin을 사용하고 싶습니다.

두 가지 플러그인을 동일한 단계에서 실행하면 배웠고 경험 한 바에서 pom.xml으로 선언 된 순서대로 실행됩니다.

이 작업을 수행하려면 maven-antrun-plugin 뒤에 <plugins/> 목록에 maven-war-plugin을 추가해야합니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <!-- First step is to disable the default-war build step. --> 
      <id>default-war</id> 
      <phase>none</phase> 
     </execution> 
     <execution> 
      <!-- Second step is to create an exploded war. Done in prepare-package --> 
      <id>war-exploded</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>exploded</goal> 
      </goals> 
     </execution> 
     <execution> 
      <!-- Last step is to make sure that the war is built in the package phase --> 
      <id>custom-war</id> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

추가 default-war이 비활성화 처음이다, 다음 전쟁이 폭발하고 마지막 전쟁이 포장되도록 좀 더 실행.

+3

이것은 내 문제에 대한 매우 유용한 답변이었습니다. 그러나, 나는 조금 다른 설정을했다 : exploded (prepare-package) -> copy-resources (prepare-package) -> war (package). war : explode 태스크를 겹쳐 쓰지 않기 위해 war 를 빈 디렉토리로 지정해야했다. – omilke

1

관찰 한대로 수명주기에서 필요한 세분성을 제공하지 못합니다. 나는 이전에 누군가 similar question에 대답했다. 귀하의 질문에 대한 정확한 대답은 아니지만 기술이 적용될 수 있습니다.