2016-11-09 12 views
1

나중에 큰 이어 파일에 포함하기 위해 마른 전쟁을 만들려고합니다. 귀 빌드는 전쟁의 프로젝트와 완전히 별개이며 날카로운 전쟁을 제공하고 정확한 마니 페스트 파일을 제공하기를 기대하며 귀는 root/libs 폴더에 제공된 jar를 제공하겠다고 약속합니다.maven-war-plugin lib 디렉토리에서 제공된 jar를 제외하지만 접두사 폴더가있는 manifest에 포함하는 방법

문제 전쟁의 manifest.mf 파일에 제공된 jar 파일이 귀의/libs 폴더에 있고 컴파일/런타임 jars가 전쟁 중임을 지정하는 중입니다. 은 즉 MANIFEST.MF 클래스 경로 항목은 다음과 같이하고 싶어 : 제공 귀의 libs와 디렉토리에 기대에

Class-Path: libs/commons-lang.jar commons-codec.jar 

공유지 - 랭 범위가.

commons-codec은 컴파일 시간이며 전쟁의 일부가 될 것으로 예상됩니다.

내가 받는다는 전쟁 - 플러그인 탐구했지만 그것은 단지 제공된 의존성에 대한 classpathPrefix을 공급 얻는 방법을 알아낼 수 없습니다.

제안 사항을 알려주십시오.


최종 채택 된 솔루션 귀에서 제공하는 종속성이 필요합니다 (팁 및 링크 모든 덕분에) 제공에 범위 수 이것은, 해킹주의 : 가짜-application.xml을 :

<plugin> 
    <!--required to fix the war's manifest and skinny the war--> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ear-plugin</artifactId> 
    <version>2.10.1</version> 
    <configuration> 
     <defaultLibBundleDir>lib/</defaultLibBundleDir> 
     <skinnyWars>true</skinnyWars> 
     <generateApplicationXml>true</generateApplicationXml> 
     <applicationXml>${project.basedir}/src/test/fake-ear/fake-application.xml</applicationXml> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>verify</phase> 
      <goals><goal>ear</goal></goals> 
     </execution> 
    </executions> 
</plugin> 

나는 다음 저장소에 새로운 마른 전쟁을 배포하고 그래서 받는다는 배포 플러그인을 사용하여 않았다 Tunaki의 maven-ear-plugin 제안이 더 나은 것 같다

<plugin> 
    <!--used in release build to deploy skinny war to nexus--> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <version>2.8.2</version> 
    <executions> 
     <execution> 
      <id>deploy-file</id> 
      <phase>install</phase> 
      <goals> 
       <goal>deploy-file</goal> 
      </goals> 
      <configuration> 
       <!--location of the skinny war after maven-ear-plugin builds it--> 
       <file>${project.build.directory}/${project.artifactId}-${project.version}/${artifactid}-${project.parent.version}.war</file> 
       <repositoryId>releases</repositoryId> 
       <url>${distributionManagement.repository.url}</url> 
       <groupId>${project.parent.groupId}</groupId> 
       <artifactId>${artifactid}</artifactId> 
       <version>${project.parent.version}</version> 
       <packaging>war</packaging> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

당신은 당신이 EAR을 만들려면 때문에, 메이븐 EAR 플러그인을보고 싶다. 그것은 끈적 끈적한 전쟁을 지원하며, 각 WAR의 목록을 올바르게 다시 작성합니다. http://maven.apache.org/plugins/maven-ear-plugin/examples/skinny-wars.html – Tunaki

+0

하지만 그렇지 않으면' 설정이 제대로 작동하려면 true'링크 된 질문을보십시오. – Tunaki

답변

0

@를 전체적인 방식은, 어쨌든 살펴 : https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html

당신은 매니페스트이 방법을 수정할 수 있습니다

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <manifestEntries> 
        <Class-Path>libs/commons-lang.jar commons-codec.jar</Class-Path> 
        </manifestEntries> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 
+0

"전체 론적 방식"이 아니라 실제로 작동하는 유일한 방법입니다. 이것은 많은 부작용을 가지고 있습니다 : 그것은 1 WAR에서만 작동합니다. WAR의 루트 디렉토리에있는 모든 클래스를 패키지화합니다. 모든 종속성을 직접 작성해야합니다.이 모든 것은 아마도 원하지 않을 것입니다. – Tunaki

+0

@ Tunaki 전 총체적으로 더 나은 것으로 당신의 제안을 실제로 언급했습니다. 내 것은 단지 지역 WAR 수정이다. 아마도 OP가 자신이 원하는 것을 우리에게 말해 줄 수 있습니다 – nandsito

+0

이보다 더 좋은 지역 WAR 수정이 있습니다 ... 연결된 질문을 보면 WAR 플러그인으로 직접 Manifest를 사용자 정의 할 수 있습니다. – Tunaki