2011-12-11 63 views
8

我使用Jar Jar Links的Ant任務將第三方jar文件(objenesis)中的類嵌入到我的可分發jar文件(example.jar)中。 Jar Jar會將原始包(org.objenesis)中的課程轉換爲我選擇的課程之一。用Jar Jar鏈接排除空目錄

它可以工作,但它會在可分發的jar中留下空目錄。

下面是一個簡化的build.xml:

<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構成的內容的樣品包括(如預期):

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

,但也是這些空目錄(不需要e):

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

我的問題:如何排除這些空目錄?

我嘗試了「zap」選項(listed in the doc),但那不起作用。

回答

7

這似乎是在瓶瓶一個已知的問題,在問題跟蹤上市:http://code.google.com/p/jarjar/issues/detail?q=empty&id=32

鑑於這幾乎是三年前提出的,並沒有出現已經有任何牽引,我想你的選擇將提供修補程序或解決此問題。

一個例子Ant目標來解決它,取螞蟻的支持優勢,爲消除對拷貝空目錄,將是:

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

這是一個有點蹩腳,但它達到你想要什麼。

+0

這似乎適用於我(我不得不轉換爲Gradle語法)。 –