2011-09-14 3 views
8

나는 다음과 같은 사용자 지정 어셈블리가 :사용자 정의 조립 기술자 명시하는 클래스 경로를 추가

<assembly> 
    <id>full</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

그리고 다음과 같은 구성 섹션 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> 
     </descriptors> 
     <archive> 
      <manifest> 
       <mainClass>com.example.MyExample</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>./lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

받는다는 조립 플러그인에 대한 설명서에 따라,이 클래스 경로 항목을 매니페스트 파일에 추가해야하지만 작동하지 않습니다. 단일 대신에 사용되지 않는 어셈블리 목표를 사용하면 작동합니다.

어딘가에 누군가가 아카이브 섹션을 jar 형식으로 만 사용할 수 있다고 언급했는데 이것이 내가 사용하고있는 것입니다.

조립품 : 조립품을 사용하지 않는 경우 올바르게 조립하는 새로운 방법을 정의 했습니까? 나는 정말로 deprecated 기능을 사용하는 것을 좋아하지 않지만, 만약 그들이 일을하고 제대로 문서화하지 못한다면, 나는 이것을 피하는 법을 정말로 모른다.

누구나 올바르게 수행하는 방법에 대한 예가 있습니까?

답변

4

이것은 어셈블리 플러그인을 사용하지 않습니다. Java는 jars-in-jars를 수행하지 않습니다. maven-jar-plugin의 구성 옵션을 사용하여 기본 항아리의 목록에 클래스 경로를 추가 한 다음 어셈블리 플러그인을 사용하여 종속성을 수집하고 zip 또는 tarball의 기본 항아리 옆에 놓을 수 있습니다.

http://maven.apache.org/shared/maven-archiver/examples/classpath.html

+0

나는 이후 jar 파일에서 종속성을 제거하고 jar 파일과 함께 lib 폴더에 넣었습니다. 그러나 문제는 여전히 남아 있습니다. 어셈블리 플러그인은 지정된대로 클래스 경로를 추가하지 않습니다. – davija

+0

그럴 필요가 없습니다. 항아리 플러그인은 그 직업을 가지고 있습니다. – bmargulies

+3

어셈블리 플러그인의 문서에 따르면 클래스 패스를 추가하라는 메시지가 표시되면 어셈블리 플러그인에 대한 설명이 표시됩니다. 현재는 더 이상 사용되지 않는 다른 목표에서 작동합니다. 문서 확인 – davija

2

당신은 받는다는 항아리 플러그인을 사용한다 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>main class</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
2

maven-assembly-plugin 버전 2.5 이상에를 업데이트하십시오.

매니페스트 파일에 예기치 않은 Class-Path 항목이없는 것은 버그 MASSEMBLY-576으로 인해 발생한 것 같습니다. 이 버그는 플러그인의 버전 2.5 (2014 년 10 월 26 일에 릴리스 됨)에서 수정되었습니다.

+0

도움을받지 못했습니다. 2.5 클래스 경로로 업그레이드되었지만 여전히 누락되었습니다. ( – sloven

관련 문제