2011-12-11 35 views
8

Tôi đang sử dụng tác vụ Ant từ Jar Jar Links để nhúng các lớp từ tệp jar của bên thứ ba (objenesis) vào tệp jar phân phối của tôi (example.jar). Jar Jar sẽ dịch các lớp từ gói gốc (org.objenesis) sang một trong những lựa chọn của tôi.Loại trừ các thư mục trống với Jar Jar Links

Nó hoạt động nhưng nó để lại các thư mục trống trong bình phân phối.

Đây là một build.xml đơn giản:

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

Một ví dụ về nội dung của example.jar bao gồm (như dự kiến):

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

nhưng cũng có các thư mục trống (undesirabl) e):

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

Câu hỏi của tôi: làm cách nào để loại trừ các thư mục trống này?

Tôi đã thử tùy chọn "zap" (listed in the doc), nhưng điều đó không hiệu quả.

Trả lời

7

này dường như là một vấn đề được biết đến trong Jar Jar, được liệt kê trong theo dõi vấn đề của họ: http://code.google.com/p/jarjar/issues/detail?q=empty&id=32

Cho rằng đây đã được nâng lên gần ba năm trước và không dường như đã có bất kỳ lực kéo, Tôi cho rằng lựa chọn của bạn là để đóng góp một sửa chữa, hoặc để làm việc xung quanh nó.

Một mục tiêu Ant ví dụ để làm việc xung quanh nó, lợi dụng sự ủng hộ của Ant để loại bỏ các thư mục trống trên bản sao, sẽ là:

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

Đó là một chút grungy, nhưng nó đạt được những gì bạn muốn .

+0

Điều này có vẻ phù hợp với tôi (tôi phải chuyển sang cú pháp Gradle). –

Các vấn đề liên quan