2012-01-11 28 views
20

Çalıştırılabilir bir Uber-jar oluşturmak için Maven-Shade-Plugin kullanıyorum. this page son çerçeveye göre, kavanozun büyüklüğüne kullanılarak minimize edilebilir:Uber Jar'ı doğru bir şekilde küçültün, Gölge Eklentisini Kullanma

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

Ama bu özellik dikkate log4j.properties dosyasında bildirilen sınıfları almaz. Dolayısıyla, örn. Log4j.properties dosyasında bildirilmiş olsa bile, org.apache.log4j.appender.TimeAndSizeRollingAppender, Uber-jar'da bulunmaz.

İlkbaharda aynı sorunla karşılaşacağımı düşünüyorum. Eğer kodum sadece A arayüzü ile ilişkiliyse ve Spring dosyam A'yı uygulayan B sınıfının bir örneğini içeriyorsa, kodda bulunmadığı için B'ye jar eklenmeyebilir.

Bu sorunu nasıl çözebilirim?

+0

Alsmot, ama tamamen değil, http://stackoverflow.com/questions/8698814/configure-maven-shade-minimizejar-to-include-class-files – Raedwald

cevap

22

Bu işlev, maven-shade-plugin'in (yalnızca yeni sürüm) 1.6 sürümüne eklenmiştir. MinimizeJar şimdi, özellikle filtrelerle dahil edilmiş olan sınıfları kaldırmayacaktır. Bir yapay nesnenin bir filtredeki sınıflarının bir kısmının, bu yapay eser için belirtilen olmayan sınıfları hariç tutacağını unutmayın. Bu nedenle, ihtiyacınız olan tüm sınıfları dahil ettiğinizden emin olun.

İşte bir örnek eklentisi yapılandırma var: onlu için

<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> 

yolu kullanarak bir filtrede sınıf adında eğik içerir olarak ekleyin, belirli sınıflar arasında (yine olmayan dahil sınıflar otomatik olarak hariç tutulur).

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

Maven belgelerin bir kopyası kopyası. – Raedwald

+15

Evet, bu cevabı yazdım ve aynı zamanda Maven belgelerini güncelledim ... – Shane

+0

"Her zaman belirli sınıfları tut" seçeneğini destekleyebilir misiniz? Örneğin, bir yapılandırma belirli sınıfları/maskeleri saklamak için listeler ve maven-shade-plugin kullanılmayan sınıfları otomatik olarak hesaplar? –

İlgili konular