2011-12-11 30 views
8

ile dağıtın Ben dağıtılabilir jar dosyası (örnek.jar) bir üçüncü taraf jar dosyası (objenez) sınıfları gömmek için Jar Jar Links bir Ant görev kullanıyorum. Jar Jar, sınıfları orijinal paketten (org.objenesis) seçtiğim bir taneye çevirecektir.Boş dizinleri Jar Jar Links

Çalışır, ancak dağıtılabilir kavanozda boş dizinler bırakır.

<target name="jar" depends="compile"> 
    <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" 
     classpath="lib/jarjar-1.1.jar"/> 

    <jarjar jarfile="dist/example.jar" excludes="org.objenesis.**"> 
     <fileset dir="build/classes/main"/> 
     <zipfileset src="lib/objenesis-1.2.jar"/> 
     <rule pattern="org.objenesis.**" result="[email protected]"/> 
    </jarjar> 
</target> 

example.jar içeriğinin bir numunesi (beklendiği gibi) içerir:

org/thirdparty/Objenesis.class 
org/thirdparty/ObjenesisBase.class 
Burada

basitleştirilmiş Build.xml olan

ama aynı zamanda bu boş dizinler (undesirabl e):

org/objenesis/ 
org/objenesis/instantiator/ 
org/objenesis/instantiator/basic/ 

sorum: nasıl bu boş dizinleri dışlamak için?

"zap" seçeneğini (listed in the doc) denedim, ancak çalışmadı.

cevap

7

Bu onların sorun izleyicide listelenen Kavanoz Kavanoz içinde bilinen bir sorun olarak karşımıza çıkmaktadır: http://code.google.com/p/jarjar/issues/detail?q=empty&id=32

bu neredeyse üç yıl önce büyüdü ve herhangi bir çekiş var görünmüyor göz önüne alındığında, ben seçeneklerinizi varsayalım bir düzeltmeye katkıda bulunacak veya etrafında çalışacaklardır.

bir örnek Ant hedef

kopya üzerinde boş dizinleri kaldırmak için Karıncanın desteklerden yararlanmakta, etrafında çalışmak, şöyle olacaktır:

<target name="unpolluted-jarjar" description="JarJars without empty directories"> 
    <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${location.lib}/build/jarjar-1.2.jar"/> 
    <jarjar basedir="${location.classes}" destfile="${location.dist.binaries}/my-app.jar"> 
     <zipfileset src="${location.lib}/shipped/dependency.jar"/> 
     <rule pattern="com.example.dependency.**" result="[email protected]"/> 
    </jarjar> 
    <mkdir dir="${location.dist.binaries}/exploded"/> 
    <unzip src="${location.dist.binaries}/my-app.jar" dest="${location.dist.binaries}/exploded/my-app.jar"/> 
    <copy includeemptydirs="false" todir="${location.dist.binaries}/unpolluted/my-app.jar"> 
     <fileset dir="${location.dist.binaries}/exploded/my-app.jar"/> 
    </copy> 
    <jar destfile="${location.dist.binaries}/my-app-unpolluted.jar"> 
     <fileset dir="${location.dist.binaries}/unpolluted/my-app.jar"/> 
    </jar> 
</target> 

Bu biraz eski, ama istediğini elde .

+0

Bu benim için işe yaradı görünüyordu (Gradle sözdizimine dönüştürmek zorundaydım). –