2009-08-25 5 views
15

어셈블리 플러그인을 사용하여 클래스가있는 여러 개의 jar 파일을 만듭니다. app_business.jarapp_gui.jarMaven-assembly-plugin : 사용자 정의 jar 파일 이름

가 현재 나는 다음과 같은 구성이core.jar를 :

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
    <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

assembly.xml 파일 나는 결과 항아리에 대한 사용자 정의 이름이 필요합니다 :

<assembly> 
     <id>app_business</id> 
     <formats> 
     <format>jar</format> 
     </formats> 
     <baseDirectory>target</baseDirectory> 
     <includeBaseDirectory>false</includeBaseDirectory> 

     <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
      <include>org/xyz/**</include> 
      </includes> 
     </fileSet>  
     </fileSets> 
    </assembly> 

이 완벽 파일 app_business.jar를 생성 . 하지만 내 다른 파일을 만드는 방법을 모르겠다. appendAssemblyId 옵션은 AppName-app_business.jar 형식의 파일 이름을 생성하므로 도움이되지 않습니다. 정확히 정확한 파일 이름이 필요합니다. app_business.jar.

아이디어가 있으십니까? 고마워요!

답변

-1

표준 maven 플러그인은 일반적이고 반복적 인 작업을위한 것입니다. 그들은 POM에서 모든 정보를 수집하고 스마트합니다 (많은 것을 구성 할 필요가 없다는 의미에서).

특별한 작업이 필요하면 POM에 Ant 코드를 삽입 할 수있는 ant plugin을 사용하는 것이 좋습니다. 이렇게하면 jar task을 실행할 수 있습니다.

+0

개미 작업과 멘토 작업을 섞어 놓는 것을 좋아하지 않습니다. 어쨌든, ant 작업을 사용하면 XML 구성이 훨씬 적어집니다. (내 직업 20 라인 정도) – Synox

+3

@Synox, antrun 플러그인을 피하면 안되며, 자신의 플러그인을 롤링하지 않고 Maven의 틈을 메우는 것이 매우 유용합니다. 나는 사람들이 더 많은 Mavenic (Maven과 동등한 Pythonic) 방법이있을 때 그것을 사용하기를 너무 좋아하는 경향이 있다는 것을 알기 쉽습니다. 이 경우 필자는 어셈블리 플러그인 *이 더 적합해야한다고 생각하지만, 내 대답에서 볼 수 있듯이 OP가 원하는대로 정확하게 작동하지 않는 몇 가지 문제가있는 것으로 보입니다. –

+0

개미를 사용하여 메이븐 플러그인을 쉽게 굴릴 수 있습니다. –

38

플러그인 선언의 실행 요소 아래에서 구성 요소를 이동할 수 있습니다. 이는 구성이 해당 실행에만 적용됨을 의미합니다. 그런 다음 다른 어셈블리에 대한 어셈블리 플러그인 실행을 추가 할 수 있습니다. 생성된다이 구성

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>make-business-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/business-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    <execution> 
     <id>make-gui-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_gui</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/gui-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

두 개의 추가 항아리 (앱 _business.jar 및 앱 _gui.jar) : 여기

두 실행 각 참조 다른 조립체와 수정 된 구성의 예 대상 디렉토리에서 프로젝트를 설치하면 마지막으로 생성 된 이슈 만 설치됩니다 (물론 이것은 문제가 될 수 있음).

이 문제를 방지하려면 appendAssemblyId 속성을 으로 변경해야합니다. 이 경우 가장 가까운 이름은 finalNames를 "app"로 변경하고 ID를 "gui"및 "business"로 변경하면 app-gui.jar 및 app-business.jar가 패키징되고 모든 아티팩트가 설치됩니다.

+0

정말 빠른 답장을 보내 주셔서 감사합니다! 작동합니다.콘솔에 경고가 있고 마지막 아티팩트가 주 아티펙트가됩니다. 그걸로 살 수는 있지만, 콘솔에는 경고가 나타나지 않았습니다. 그들을 숨길 수있는 방법이 있습니까 (또는 그렇게하도록 어셈블리를 구성 할 수 있습니까)? – Synox

+0

경고는 무엇입니까? 밑줄에서 하이픈으로 변경할 수있는 경우 내 대답의 마지막 섹션에서 주 이슈 문제를 해결합니다. –

+1

경고 : [경고] 구성 옵션 : 'appendAssemblyId'가 false로 설정되어 있고 'classifier'가 없습니다. . 어셈블리 파일 인 ... \ app_business.jar을 연결하는 대신 주 프로젝트 아티팩트 파일이됩니다. 참고 :이 프로젝트에 대해 여러 개의 설명자 또는 설명자 형식이 제공되는 경우이 파일의 값은 비 결정적입니다. [경고] 기존 프로젝트 기본 아티팩트 파일을 대체하는 중 ... ... \ app_gui.jar (어셈블리 파일 포함) : .... \ app_gui.jar 밑줄에서 하이픈으로 변경하지 않으려합니다. 하지만 피할 수 없다면 ...이 솔루션은 꽤 좋습니다. – Synox

관련 문제