2012-06-06 3 views
0

maven-assembly-plugin을 사용하여 사용자 정의 assembly.xml 파일을 사용하여 tar.gz 어셈블리를 빌드하고 있습니다. 그 타르 안에 {stuff +} 특정 종속성을 가진 WAR 파일이 있습니다 :maven을 사용하여 tar 어셈블리에 Jar 종속성 포함

WEB-INF/lib/my-dependency.jar 

모두 잘 작동합니다.

이제 종속성을 가지고 WAR 파일에서 제거하고 대신 tar.gz의 루트에 넣기를 원합니다.

현재 잘못된 솔루션

<fileSets> 
    <fileSet> 
     <outputDirectory>/config/lib</outputDirectory> 
     <directory>${project.build.directory}/fa/WEB-INF/lib</directory> 
     <includes> 
      <include>my-dependency-*.jar</include> 
     </includes> 
    </fileSet> 
</fileSets> 

으로 (내 현재의 솔루션을 사용) 내가 지금까지 타르에 의존 퍼팅으로 얻을 수 있습니다,하지만 난 전쟁에서 제거 할 수 없습니다

위의 수정, 나는 또한 어셈블리 플러그인 내에서 $ {project.build.directory}/fa/WEB-INF/lib/my-dependency - * .jar 파일을 삭제할 수있는 방법이 필요하다. 위의 지시어가 실행될 때 이미 생성되었음을 확신합니다.

또는 다른 방법을 사용하는 것이 더 좋을 수도 있습니다.

답변

0

전쟁이이 프로젝트의 종속물 인 경우 어셈블리 플러그인을 사용하여 압축을 풀고 항아리없이 다시 포장 할 수 있습니다. 핵심 구성은 unpack 및 unpackOptions 속성입니다.

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
<id>my-stripped-war</id> 

<formats> 
    <format>war</format> 
</formats>  

<dependencySets> 
    <dependencySet> 
     <outputDirectory></outputDirectory> 
     <useTransitiveDependencies>false</useTransitiveDependencies> 
     <useProjectArtifact>false</useProjectArtifact> 
     <includes> 
      <include>*:war</include> <!-- however specific you need here --> 
     </includes> 
     <unpack>true</unpack> 
     <unpackOptions> 
      <excludes> 
       <!-- jars to exclude here --> 
      </excludes> 
     </unpackOptions> 
    </dependencySet> 
</dependencySets> 
</assembly> 

그런 다음 현재 어셈블리 설명자에서 file 또는 fileSet을 사용하여이 제거 된 전쟁을 가져옵니다. 제거 된 전쟁을 프로젝트에 첨부해야하는 경우 현재 설명 앞에이 설명자를 어셈블리 플러그인 요소에 추가하기 만하면됩니다. 여러 개의 어셈블리 플러그인 실행을 사용하고 제거 된 전쟁 실행에 대해 <attach>을 false로 설정해야합니다.

전쟁이이 프로젝트의 일부로 빌드되는 경우 전쟁 플러그인에서 원치 않는 병을 없애기 위해 전쟁 플러그인 구성에서 <packagingExcludes> 요소를 사용해보십시오. 추가 어셈블리 설명자가 필요하지 않습니다.

관련 문제