2010-03-26 23 views
28

से फ़ाइलों को निकालने के लिए चींटी कार्य एक एंटी टास्क कैसे लिखें जो पहले संकलित जेएआर से फ़ाइलों को हटा देता है?चींटी जार

मेरा जार में फ़ाइलों को मान लीजिए हैं:

aaa/bbb/ccc/Class1 
aaa/bbb/ccc/Class2 
aaa/bbb/def/Class3 
aaa/bbb/def/Class4 

... और मुझे aaa.bbb.def पैकेज के बिना इस JAR फ़ाइल का एक संस्करण चाहते हैं, और मैं चींटी का उपयोग कर इसे बाहर निकाल देते हैं, इस तरह के मुझे लगता है कि करने की जरूरत है एक जार के साथ समाप्त होता है जिसमें

aaa/bbb/ccc/Class1 
aaa/bbb/ccc/Class2 

धन्यवाद!

उत्तर

55

क्या आपने zipfileset कार्य का उपयोग करने का प्रयास किया है?

<jar destfile="stripped.jar"> 
    <zipfileset src="full.jar" excludes="files/to/exclude/**/*.file"/> 
</jar> 

उदाहरण के लिए:

<property name="library.dir" value="dist"/> 
<property name="library.file" value="YourJavaArchive.jar"/> 
<property name="library.path" value="${library.dir}/${library.file}" /> 
<property name="library.path.new" value="${library.dir}/new-${library.file}"/> 

<target name="purge-superfluous"> 
    <echo>Removing superfluous files from Java archive.</echo> 

    <jar destfile="${library.path.new}"> 
     <zipfileset src="${library.path}" excludes="**/ComicSans.ttf"/> 
    </jar> 

    <delete file="${library.path}" /> 
    <move file="${library.path.new}" tofile="${library.path}" /> 
</target> 
+0

आपके उत्तर के लिए @mipadi धन्यवाद:

यहाँ एक उदाहरण है! मैं उम्मीद कर रहा था कि एक मध्यवर्ती चरण के बिना एक विधि थी - जो सीधे जार से फ़ाइलें/फ़ोल्डरों को हटा रही है। मुझे लगता है कि यह मुझे लगता है कि यह निकटतम है! – bguiz

+0

बस एक एफवाईआई, शायद इसे सबसे ज्यादा पता है, लेकिन मैंने इसके बारे में नहीं सोचा :-)। "जार" कार्य जेएआर के MANIFEST.MF को संशोधित करेगा, जो मेरे मामले में समस्याओं का कारण बनता है। मैंने जार कार्य में "मेनिफेस्ट" विशेषता को जोड़ा और इसे उस मैनिफेस्ट पर इंगित किया जिसे मैं उपयोग करना चाहता था। महान जवाब हालांकि, निश्चित रूप से मेरी मदद की, धन्यवाद! MANIFEST.MF बदलने से बचने के लिए – Craig

+1

'jar' के बजाय' ज़िप 'का भी उपयोग कर सकता है – npostavs

0

मुझे यकीन नहीं है कि आपकी आवश्यकता के लिए कोई सीधा समाधान है या नहीं। मैं जार को कुछ अस्थायी निर्देशिका में विस्फोट करने की सलाह दूंगा और फिर अवांछित कक्षा फ़ाइलों को हटा दूंगा। अंत में आवश्यक वर्ग फ़ाइलों के साथ एक नया जार बनाएँ।

संदर्भ लिंक:

http://ant.apache.org/manual/Tasks/unzip.html

http://ant.apache.org/manual/Tasks/delete.html

http://ant.apache.org/manual/Tasks/jar.html

5

आप unjar और rejar किया है।

<unzip src="myjar.jar" dest="/classes/"> 
<jar destfile="newjar.jar" 
    basedir="/classes/" 
    includes="**/*" 
    excludes="**/def/*" 
/>  
1

तो एक जार फ़ाइल सक्षम archiver कार्यक्रम, जैसे जैसे लिनक्स पर "ज़िप", उपलब्ध है, कार्य

 
<exec executable="zip">    
<arg value="-d"/>    
<arg value="myJarCopyToStrip.jar"/>    
<arg value="aaa/bbb/def/*>    
<arg value="aaa/bbb/def> 
</exec> 

सबट्री विलोपन द्वारा किया जा सकता का इस्तेमाल किया archiver की क्षमताओं पर निर्भर करता है।
चींटी "exec" कार्य की "ओएस" विशेषता विभिन्न ओएस पर विभिन्न संग्रहकर्ताओं का उपयोग करने की अनुमति देती है।

1

मैं यहाँ एक आंगन के रूप में चींटी को अनजिप में कुछ कम कॉमिंग के रूप में उपयोग करने के लिए देख रहा था।

ऑफ मौके पर कोई और एक ही नाव में है।

task antUnzip() << { 

      ant.jar(destfile : "stripped.jar") { 
       zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") { 
       } 
      } 
}