2010-05-12 13 views
19

मैं कई जेएआर फाइलों को उतारना चाहता हूं और फिर चींटी निर्माण स्क्रिप्ट का उपयोग करके एक जार में पुनर्निर्माण करना चाहता हूं। क्या यह संभव है?आप कई जेएआर फ़ाइलों को अनजाने के लिए चींटी का उपयोग कैसे करते हैं और उन्हें एक जेएआर फ़ाइल में पुनर्निर्माण करते हैं?

उत्तर

14

हां, यह चींटी के साथ संभव है। एक जार फ़ाइल मूल रूप से एक विशेष मैनिफेस्ट फ़ाइल के साथ एक ज़िप है। तो उज्ज्वल करने के लिए, हमें जार को अनजिप करने की आवश्यकता है। चींटी में unzip कार्य शामिल है।

अनज़िप करने के लिए अपनी परियोजना में/unjar सभी जार फ़ाइलें:

<target name="unjar_dependencies" depends="clean"> 
    <unzip dest="${build.dir}"> 
     <fileset dir="${lib.dir}"> 
      <include name="**/*.jar" /> 
     </fileset>  
    </unzip> 
</target> 

जाहिर है आप पहली बार $ {build.dir} और $ {lib.dir} घोषित करने के लिए की जरूरत है। लाइन <include name="**/*.jar" /> चींटी को जार एक्सटेंशन के साथ समाप्त होने वाली सभी फ़ाइलों को शामिल करने के लिए कहती है, आप अपनी आवश्यकताओं के अनुसार इसमें शामिल हो सकते हैं।

एक जार में सब कुछ पैक करने के लिए आपको jar कार्य का उपयोग करें:

<target name="make_jar" depends="compile, unjar_dependencies"> 
    <jar basedir="${build.dir}" 
     destfile="${dist.dir}/${project_name}.jar"> 
     <manifest> 
      <attribute name="Main-Class" value="${mainclass}" /> 
     </manifest> 
     <fileset dir="${build.dir}"> 
      <include name="**/*.class" /> 
     </fileset> 
     <fileset dir="${src.dir}"> 
      <include name="applicationContext.xml" /> 
      <include name="log4j.properties" /> 
     </fileset> 
    </jar> 
</target> 

इस उदाहरण में, हम अलग अलग फ़ाइलसेट शामिल हैं। एक फाइलसेट में हम सभी संकलित कक्षाएं शामिल हैं। एक और फाइलसेट में हम दो कॉन्फ़िगरेशन फाइलें शामिल करते हैं जो इस विशेष परियोजना पर निर्भर करती हैं।

7

हां यह है!

  • एस्पेन जवाब:

एक संभव समाधान है कि एक दिया निर्देशिका में सभी जार फ़ाइलों से एक जार फ़ाइल बनाता है:

आप दो संभावनाएं है

<target name="dependencies.jar"> 
    <jar destfile="WebContent/dependencies.jar"> 
     <zipgroupfileset dir="lib/default/" includes="*.jar" 
       excludes="*.properties" /> 
    </jar> 
</target> 

यह उपयोगी है अगर आपको कुछ जार में मौजूद सामग्री को बाहर करने की आवश्यकता नहीं है (उदाहरण के लिए कुछ गुण कॉन्फ़िगरेशन फ़ाइल जो आपके ओवरराइड हो सकती हैं आदि)। यहां गुणों को छोड़कर डीआईआर संपत्ति से फ़ाइलों को फ़िल्टर कर रहा है।

  • उपयोग zipfileset

अन्य समाधान zipfileset टैग जहां शामिल नहीं संपत्ति इस समय जार से सामग्री को फ़िल्टर होगा मर्ज करने का प्रयोग है।

<jar destfile="your_final_jar.jar" filesetmanifest="mergewithoutmain"> 
    <manifest> 
     <attribute name="Main-Class" value="main.class"/> 
     <attribute name="Class-Path" value="."/> 
    </manifest> 
    <zipfileset 
     excludes="META-INF/*.SF" 
     src="/path/to/first/jar/to/include.jar"/> 
</jar> 
  • बेशक आप दोनों में से सबसे अच्छा पाने के लिए एक ही जार टैग के अंदर दो टैग (zipfileset और zipgroupfileset) जोड़ सकते हैं।
3

हां, यह संभव है।

एक संभव समाधान है कि किसी भी निर्देशिका में सभी जार फ़ाइलों से एक जार फ़ाइल बनाता है:

<target name="dependencies.jar"> 
    <jar destfile="WebContent/dependencies.jar"> 
     <zipgroupfileset dir="lib/default/" includes="*.jar" 
       excludes="*.properties" /> 
    </jar> 
</target> 
0

वहाँ भी जार JarJar बुलाया repackage के लिए समर्पित एक परियोजना है। आप इसे एकाधिक जार को एक में पुन: स्थापित करने के लिए उपयोग कर सकते हैं। आपकी आवश्यकताओं के आधार पर, आप संस्करण विवादों को रोकने के लिए कक्षाओं का नाम भी बदल सकते हैं।

से

उनके getting started page:

इस उदाहरण हम jaxen.jar से कक्षाओं में शामिल हैं और एक नियम के किसी भी वर्ग का नाम बदल कर कि "org.jaxen 'के साथ शुरू के साथ" org.example.jaxen "के बजाय शुरू करने के लिए जोड़ने में (हमारी काल्पनिक दुनिया में हम example.org डोमेन को नियंत्रित करते हैं):

<target name="jar" depends="compile"> 
    <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" 
     classpath="lib/jarjar.jar"/> 
    <jarjar jarfile="dist/example.jar"> 
     <fileset dir="build/main"/> 
     <zipfileset src="lib/jaxen.jar"/> 
     <rule pattern="org.jaxen.**" result="[email protected]"/> 
    </jarjar> 
</target> 
संबंधित मुद्दे