2014-07-18 4 views
3

나는 다음과 같은 종속성이 :사용 받는다는 그늘 - 플러그인하지만 종속 클래스는 최종 항아리에없는 내 프로젝트의 pom.xml 파일에서

<dependency> 
    <groupId>com.my.library</groupId> 
    <artifactId>MyLib</artifactId> 
    <version>1.0</version> 
    <type>jar</type> 
</dependency> 

<dependency> 
    ... 
</dependency> 

나는 포함한 내 프로젝트의 최종 내장 항아리를 가지고 싶습니다 com.my.library:MyLib 의존성 위의 클래스는, 그래서 나는 다음과 같은 방법으로 maven-shade-plugin을 사용 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <filters> 
       <filter> 
        <artifact>com.my.library:MyLib</artifact> 
        <includes> 
         <include>com/my/library/**</include> 
        </includes> 
       </filter> 
       </filters> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

그런 다음, 나는 mvn clean install 실행, 내 프로젝트가 성공적으로 지어졌습니다. 내가 target/ 디렉토리에 MyProject.jar의 내용을 검사 할 때

, 그것은 com.my.library:MyLib 의존성의 클래스를 포함하지 않는 이유는 무엇입니까? maven-shade-plugin은 어디에서 잘못 되었습니까?

<artifactSet> 
    <includes> 
     <include>com.my.library:MyLib</include> 
    </includes> 
</artifactSet> 

그리고 <filters/>에서 <artifact/>을 제거하려고 :

<includes> 
    <include>com/my/library/**.class</include> 
</includes> 
+0

무엇을 포함하고 있습니까? 어떤 include/exclude없이 시작한 후에 결과 jar의 일부가되어서는 안되는 것들을 제외시켜보십시오. – khmarbaise

+0

@khmarbaise, 큰 프로젝트는 많은 의존성을 사용했기 때문에 하나의 의존성 클래스를 최종 jar에 포함시키고 싶습니다. 그래서 excludes 대신 include를 사용합니다. – user842225

+0

@ user842225 : 라이브러리를 하나씩 수동으로 제외하면 안되지만 khmarbaise에는 요점이 있습니다. 처음에는 그것이 전혀 포함되지 않는지 먼저 확인한 다음 추가 조사를하고 내 대답을 확인하십시오. – carlspring

답변

0

변화 패턴은 <artifactSet>을 정의합니다. 이렇게해야합니다.