2011-02-10 6 views
0

현재 WAR 파일을 생성하는 Maven 빌드 (버전 2.2.1)가 있습니다. 출력 디렉토리는 target/이므로 빌드 이슈 target/MyWar.WAR으로 끝납니다.WAR 패키지 제품에 Maven 프로파일 사용

A.xml 파일의 특정 버전을 필요로하는 특정 빌드 "형식"을 용이하게하기 위해 POM.xml 파일에 두 개의 프로파일을 추가합니다. 중간 빌드 디렉토리 target/MyWar/에서이 3 개 개의 파일은 다음과 같습니다 A.xml를 사용해야 지정된 프로파일없이 메이븐에서

A.xml 
A_1.xml 
A_2.xml 

건물, 그리고 현재 않습니다. 나는 maven-antrun-plugin (프로필 1)을 사용하여 A.xml을 A_1.xml로 바꾸고, 프로필 2의 경우 A.xml을 A_2.xml로 바꿉니다. (_1와 _2 접미사를 제거.)

이 프로필 (1)의 실행의 예입니다

<profile> 
<id>Profile1</id> 
<build> 
... 
    <execution> 
     <id>Profile1-Replace</id> 
     <phase>package</phase> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     <configuration> 
      <tasks> 
       <delete 
        file="${project.build.outputDirectory}/../MyWar/A.xml" /> 
       <copy 
        file="${project.build.outputDirectory}/../MyWar/A_1.xml" 
        tofile="${project.build.outputDirectory}/../MyWar/A.xml" /> 
      </tasks> 
     </configuration> 
    </execution> 
... 
</build> 
</profile> 

이 올바르게 중간 목표/MyWar/디렉토리에있는 파일을 대체하지만, 어떤 이유로 최종 WAR에 대한 그 제품은 target에서 이 아니며은 이러한 변화를 반영합니다.

'패키지'단계에서 실행하는 것이 너무 늦어서 WAR이 이미 작성된 것과 같습니다. A.xml 파일 (및 중간 빌드 디렉토리)이 아직 작성되지 않았기 때문에 단계를 '컴파일'또는 '테스트'로 변경하면 바로 이전 단계가 불평합니다.

+1

Maven 2 또는 Maven 1? Maven 2의 경우 어떤 버전입니까? 최근 버전의 Maven 2에서는 요소의 플러그인 순서에 따라 동일한 단계에있을 때 플러그인이 실행되는 순서가 결정됩니다. – Pace

+0

Maven 2.2.1, 내 질문이 업데이트되었습니다. –

+0

A.xml 파일 하나를 보관할 수도 있지만 리소스 필터링 (http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-description.html) 대신 프로필, 원하는 효과를 얻으려면? – Upgradingdave

답변

2
당신이 느낀다면 내가 단계 대신 프로세스 리소스를 사용하는 것이 좋습니다, 또는 생성 - 자원

더 나은 적합합니다. 최후의 수단으로 준비 패키지을 사용하십시오. 그러나 패키지 단계는 이런 종류의 일을하는 잘못된 장소입니다. 이러한 모든 변경은 일반적으로 소스 트리에서 직접 발생할 수 있습니다. 물론

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <webResources> 
     <resource> 
      <directory>A_variant</directory> 
     </resource> 
     </webResources> 
    </configuration> 
    </plugin> 

이 경로를 이동해야하는 경우 : 별도의 디렉토리에있는 파일 조작을 할 경우

그러나, 당신은 다음과 같이 maven-war-plugin를 사용하여 패키지 단계에서 추가 할 수 있습니다 세 개의 디렉토리를 유지하고 프로파일에서 적절한 디렉토리를 선택하는 것이 더 간단합니다.

+0

문제는 WAR를 생성하기 위해 압축 된 중간 디렉토리가 준비 패키지 단계 후 * 패키지 * 단계 이전까지 * 생성되지 않는다고 시도했습니다. XML이 아직 존재하지 않고 WAR가 이미 작성 되었기 때문에 패키지 단계에서 실행이 실패하기 때문에 준비 패키지 단계에서 실행이 실패합니다. –

+0

@craig 소스 트리를 의미한다는 것을 명확히하기 위해 몇 가지 세부 사항을 추가했습니다. 또는 webResources를 추가하여 소스 트리를 포함 할 선택 방법을 선택하는 방법을 설명했습니다.그 길로 가면 파일 조작에 신경 쓰지 않을 것입니다. 별도의 디렉토리를 사용합니다. A_2.xml 대신 Profile2/A.xml이 있어야합니다. –

관련 문제