2012-07-11 3 views
4

이 질문에 대해 약간 어리 석었지만 다른 jar 파일에 단일 종속성 (jdom.jar)을 추가하는 방법을 알 수 없습니다.maven 및 fatjar 플러그인을 사용하여 jar에 단일 종속성을 포함하는 방법

컨텍스트 : 우리는 우리의 응용 프로그램을위한 간단한 플러그인을 개발했습니다.이 플러그인은 많은 의존성을 가지고 있습니다. fatjar를 사용하여 jdom.jar를 포함 시켰습니다. 나는이 플러그인에서 버그를 고치려고 노력 중이므로 동시에 "maven -ize"하기로 결정했다. (우리는 방금 maven으로 전환했습니다.)이 플러그인은 런타임에로드되므로 jdom.jar와 함께 패키지로 묶을 수있는 유일한 종속성이 있습니다.

문제점 : maven fatjar 플러그인이 있다는 것을 발견했습니다! 불행히도 나는 어떤 문서도 찾을 수 없었고이 maven 플러그인은 모든 종속성을 출력 병에 추가합니다. 많은 시도 후에 나는이 fatjar 플러그인을 포기하기로 결정하고 다른 플러그인을 찾았습니다. 원 - 항아리를 발견했지만 그늘이 있지만 은 모든 의존성을 추가하는 것처럼 보입니다.

질문 :이 같은 항아리에 플러그 내에 전용 jdom.jar 추가하는 간단한 방법이 될 것입니다 무슨 : 또한

 
-MyPlug-in.jar 
| 
|-src 
|-main 
    |-java 
    |-*.java 
|-jdom.jar 

내가 매니페스트 또는 출력 항아리 파일 이름

을 변경하지 않으

시간 내 주셔서 감사합니다.

답변

8

maven-shader-plugin과 함께 하나의 jar 파일을 포함하기 위해 maven을 사용하는 방법에 대한 대답은 없습니다. 실제로 그것을하는 방법을 이해하는 데는 시간이 걸렸습니다. 다음은 종속성 com.googlecode.json-simple:json-simple의 클래스 만 포함하는 스 니펫입니다.

<project> 
    ... 
    <build> 
     <plugins> 
      ... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.6</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
           <includes> 
            <include>com.googlecode.json-simple:json-simple</include> 
           </includes> 
          </artifactSet> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      ... 
     </plugins> 
    </build> 
    ... 
</project> 
+0

정확히 내가 필요로하는 것은이 버전은 2.4.3 버전에서도 완벽하게 작동합니다. 다양한''변이에 어려움을 겪고 있었지만, 마침내''대신''이 완성되었습니다. –

0

많은 목적으로 제어 할 수있는 ueber-jar를 만들 수있는 maven-shade-plugin을 사용하는 것이 좋습니다. shade plugin you can exclude things으로는 싫어합니다. 그러나 이것은 종속성을 제어 할 수있는 별도의 maven 모듈을 사용하지 않아서 발생할 수 있습니다.

+0

감사합니다. 나는 올바른 방향으로 가고 있다는 것을 알았지 만 마침내 다른 방향으로 나아 가기로 결정했습니다. 내 대답을 보라. – drgn

0

Maven Shade를 사용하면 문제가 없으며 one-jar도 작업을 완료했을 것입니다. 그러나 우리는 마침내 우리 확장에서 패키징 jdom이 나쁜 습관이라고 결정했습니다.

그래서 대신에 우리는 이것을 할 거 야 :

 
|-Root application Folder 
|-Extension Folder 
    |-MyExtension.jar 
    |-libs Folder 
    |-jdom.jar 

항아리를 동적으로로드 될 lib 폴더로와 확장이 libs와 폴더에 적절한 libs와 찾을 수없는 경우로드되지 않습니다.

주요 문제를 해결하려는 사람들에게 @khmarbaise Answer를 확인하십시오.

관련 문제