2012-01-11 3 views
20

Maven-Shade-Plugin을 사용하여 실행 가능한 Uber-jar를 만듭니다. 은 this page의 마지막 프레임에 따르면, 항아리의 크기를 사용하여 최소화 할 수 있습니다Uber Jar를 올바르게 최소화, Shade-Plugin 사용

<configuration> 
     <minimizeJar>true</minimizeJar> 
</configuration> 

그러나이 기능은 고려 사항으로 log4j.properties 파일에 선언 된 수업을하지 않습니다. 따라서, 예를 들어. org.apache.log4j.appender.TimeAndSizeRollingAppender은 log4j.properties 파일에 선언되어 있어도 Uber-jar에 포함되어 있지 않습니다.

나는 스프링과 같은 문제에 직면하게 될 것이라고 믿는다. 내 코드가 인터페이스 A 만 참조하고 Spring 파일에 A를 구현하는 B 클래스의 인스턴스가 포함되어 있으면 코드에 없으므로 B가 Jar에 추가되지 않을 수 있습니다.

이 문제를 어떻게 해결할 수 있습니까?

+0

Alsmot 있지만, 꽤, http://stackoverflow.com/questions/8698814/configure-maven-shade-minimizejar-to-include-class-files – Raedwald

답변

22

이 기능은 maven-shade-plugin (방금 출시 됨)의 1.6 버전에 추가되었습니다. minimizeJar는 이제 필터에 특별히 포함 된 클래스를 제거하지 않습니다. 필터에 일부 이슈 클래스를 포함하면 해당 이슈에 대해 지정되지 않은 클래스가 제외되므로 필요한 모든 클래스를 포함해야합니다.

여기 예를 들어 플러그인 설정입니다 : onlu으로

<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> 
       <minimizeJar>true</minimizeJar>  
       <filters> 
        <filter> 
         <artifact>log4j:log4j</artifact> 
         <includes> 
          <include>**</include> 
         </includes> 
        </filter> 
        <filter> 
         <artifact>commons-logging:commons-logging</artifact> 
         <includes> 
          <include>**</include> 
         </includes> 
        </filter>      
       </filters> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

경로를 사용하여 필터의 클래스 이름에 슬래시가 포함로 추가, 특정 클래스를 포함 (다시 비 포함 클래스는 자동으로 제외됩니다).

<filter> 
    <artifact>org.yourorg:your-artifact</artifact> 
    <includes> 
    <include>org/yourorg/yourartifact/api/*</include> 
    <include>org/yourorg/yourartifact/util/*</include> 
    </includes> 
</filter> 
+0

메이븐 문서의 사본의 중복. – Raedwald

+15

예,이 답변을 작성하고 동시에 Maven 문서를 업데이트했습니다 ... – Shane

+0

"항상 특정 클래스 유지"옵션을 지원할 수 있습니까? 예를 들어, 보관할 특정 클래스/마스크를 나열하는 구성이 있으며 maven-shade-plugin은 사용되지 않는 클래스를 자동으로 계산합니까? –

관련 문제