2012-04-23 3 views
4

Maven 어셈블리 플러그인을 사용하여 이전에 Ant에서 수행 한 제품 WAR을 빌드하고 있습니다. Apache Ant의 많은 부분이 있으므로 빌드 프로세스를보다 쉽게 ​​만들어주는 특정 요구 사항이 있습니다. 특정 하위 폴더 (예 : jar 또는 war 자원)를 특정 대상 하위 폴더에 복사합니다.Maven 어셈블리 : 종속성의 특정 하위 폴더에서 복사

지금까지 내가 조립 기술자가 <outputDirectory>을 지정할 수 배웠습니다,하지만 <sourceDirectory>을 지정할 수있는 기회가있다? 예를 들어 하나의 WAR 또는 JAR 유형 종속성에 대해이 규칙을 적용하려고합니다.

이 조립 기술자 조각의 예 (정확하지 않은 100 %)을 고려 : WEB-INF/MyResources가에 전쟁 : 나는 내 고유의 의존성에서 일부 폴더를 복사 할 것을 말하고 싶은

<dependencySet> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
     <useProjectArtifact>false</useProjectArtifact> 
     <includes> 
      <include>my-specific-dependency:war</include> 
     </includes> 
     <outputDirectory>WEB-INF/myresources</outputDirectory> 
    </dependencySet> 

을 .

편집 NB가 :이 우리가 유물 안에 어떤 건지 안로 매우 정확한 요구 사항은 아니라고 알고 있어요, 올바른 방법은 대상 디렉토리 전체 유물을 추출 선언 될 것이다 (깔끔한 선언 접근).

답변

3

당신은이 작업을 수행 할 메이븐 종속성 플러그인을 사용할 수 있어야합니다. 또한 패키지를 풀기위한 옵션이 들어있는 dependencySet에 대해서 documentation을 확인하십시오. 모듈 패키징을 전쟁으로 변경하고 Maven 규칙에 맞게 만들고 Maven을 ant와 같이 사용하지 마십시오.

+0

감사합니다. 귀하의 의견은 많은 도움을 받았습니다. 이제는 maven-war-plugin과 maven-dependency-plugin을 사용하여 최종 WAR를 만드는 방법을 바꾸기를 희망합니다. 동일한 artifact를 참조하지만 다른 가 다른 여러 요소를 가질 수 있습니까? –

+0

시도해 볼 수 있습니다. 그래도 작동하지 않으면 여러 번의 실행 *을 사용할 수 있습니다. – nwinkler

+0

솔직하게 말해서, 저의 대답은 원래의 질문에 대한 직접적인 답을 제공합니다. 하지만 간단하고 정확한 해결책으로 목표를 달성하는 방법을 분명하게 보여 줬습니다. –

0

어셈블리 설명자 (버전 2.2-beta-1 이후)는 <dependencySet>을 포함하여 unpackOptions 명령어를 제공합니다. 정확히 내가 필요로하는 것. 난 당신이 대신 maven-assembly-plugin으로 그 일을 할 수있는 maven-war-plugin 확인하는 것이 recomment http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>unpack-database-scripts</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>unpack</goal> 
     </goals> 
     <configuration> 
      <artifactItems> 
      <artifactItem> 
      <groupId>myGroup</groupId> 
      <artifactId>myArtifact</artifactId> 
      <version>1.0</version> 
      <type>war</type> 
      <overWrite>true</overWrite> 
      <includes>...</includes> 
      <outputDirectory>…</outputDirectory> 
      </artifactItem> 
     </artifactItems> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
2

먼저 다음 목표를 풀고과

+0

아마 당신은 내가해야 할 maven-war-plugin을 시도해야 할 것입니다. @nwinkler가 제안한 제안을 조합하여 어셈블리 플러그인을 사용하여 달성 할 것으로 기대했던 것과 동일한 유연성을 얻을 수 있기를 바랍니다. –

관련 문제