2011-12-11 19 views
8

के साथ खाली निर्देशिकाएं बहिष्कृत करें मैं अपने वितरण योग्य जार फ़ाइल (example.jar) में किसी तृतीय-पक्ष जार फ़ाइल (objenesis) से कक्षाओं को एम्बेड करने के लिए Jar Jar Links से एक चींटी कार्य का उपयोग कर रहा हूं। जार जार मूल पैकेज (org.objenesis) से कक्षाओं का चयन मेरे चयन में से एक में करेगा।जार जार लिंक

यह काम करता है लेकिन यह वितरित जार में खाली निर्देशिका छोड़ देता है।

<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 

यहाँ एक सरलीकृत build.xml है

लेकिन इन खाली निर्देशिकाओं (undesirabl भी ई):

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

मेरा प्रश्न: मैं इन खाली निर्देशिकाओं को कैसे बाहर निकालना है?

मैंने "ज़ैप" विकल्प (listed in the doc) की कोशिश की, लेकिन यह काम नहीं किया।

उत्तर

7

यह जार जार में एक ज्ञात मुद्दा है, उनके समस्या ट्रैकर में सूचीबद्ध हो गया लगता है: http://code.google.com/p/jarjar/issues/detail?q=empty&id=32

यह देखते हुए कि इस लगभग तीन साल पहले उठाया गया था और किसी भी कर्षण मिल गया है प्रतीत नहीं होता है, मैं अपने विकल्पों को लगता है एक फिक्स का योगदान करने के लिए, या इसके आसपास काम करने के लिए हैं।

एक उदाहरण चींटी लक्ष्य उसके चारों ओर काम करने के लिए, प्रति पर खाली निर्देशिका दूर करने के लिए चींटी के समर्थन का लाभ लेने, होगा:

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

यह थोड़ा grungy है, लेकिन यह प्राप्त होता है आप क्या चाहते हैं ।

+0

यह मेरे लिए काम करना प्रतीत होता था (मुझे ग्रैडल सिंटैक्स में कनवर्ट करना पड़ा)। –