2012-03-15 8 views
9

यह शायद वास्तव में एक मौलिक सवाल है, लेकिन मुझे डर है कि मुझे जावा के बारे में बहुत कुछ पता नहीं है और मुझे कहीं भी जवाब नहीं मिला।बिल्डिंग जेएआर जिसमें इसकी सभी निर्भरताएं शामिल हैं

मैं एक चींटी लाइब्रेरी बनाने का प्रयास कर रहा हूं जो टीएफएस एसडीके पर निर्भर करता है। मैं एक परियोजना की स्थापना के लिए the guide पीछा किया, लेकिन जब मैं एक जार के रूप में निर्यात और एक चींटी कार्य का उपयोग कर मैं निम्नलिखित त्रुटि मिलती है चलाने का प्रयास: मुझे लगता है कि मैं अपने चींटी में TFS एसडीके जार डाल सकता है

java.lang.NoClassDefFoundError: /com/microsoft/tfs/core/util/TFSUser 

lib फ़ोल्डर, लेकिन यदि संभव हो तो मैं अपने जेएआर को शामिल करना चाहता हूं और पुस्तकालय बस ऐसा करने के बिना काम करता है।

This answer ऐसा लगता है कि ग्रहण (मैं 3.7.2 का उपयोग कर रहा हूं) का उपयोग करने के लिए आवश्यक सभी संसाधनों को शामिल करना संभव है लेकिन यह विस्तार से नहीं करता है कि यह वास्तव में कैसे किया जाए। ऐसा करने के लिए ग्रहण में विकल्प क्या है?

+0

आप अपने चींटी फ़ाइल को पोस्ट कर सकते हैं? –

उत्तर

3

निर्यात करते समय "उत्पन्न जेएआर में आवश्यक पुस्तकालय निकालें" का चयन करें।

Extract required libraries into generated JAR

का चयन करें "उत्पन्न जार में निकालें आवश्यक पुस्तकालयों" आप निर्यात करते हैं।

+0

Alt-PrintScr संवाद बॉक्स को कैप्चर करने के लिए अच्छा है। –

+0

10-4। मैं देखूंगा कि मैं उस छवि को संपादित कर सकता हूं या नहीं। धन्यवाद। – Java42

+0

बीटीडब्ल्यू, वह अन्य विकल्प, "उत्पन्न जेएआर में पैकेज आवश्यक पुस्तकालय" भी "अधिकांश समय" काम करता है। यह मैनिफेस्ट में एक ग्रहण उत्पन्न हुक जोड़ता है लेकिन कभी-कभी हुक (और मुझे याद नहीं है क्यों, माफ करना) हुक मेरे पर्यावरण में काम नहीं करता है इसलिए मैंने उस विकल्प का उपयोग करना बंद कर दिया। ऐसा लगता है: आरआरसी-मेन-क्लास: टेस्ट मुख्य श्रेणी: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader – Java42

3

एक्लिप्स से फ़ाइल -> निर्यात -> जावा -> रननेबल जेएआर फ़ाइल का उपयोग करें।

"उत्पन्न जेएआर में आवश्यक पुस्तकालय निकालें" जो आपको चाहिए वह होना चाहिए।

1

जब आप एक जार बनाते हैं तो आपको जार मिलता है जिसमें केवल आपका कोड होता है, और आपके जार की कोई निर्भरता नहीं होती है। आप सभी निर्भरताओं को जार फ़ाइल को प्रबंधित करने में आसान बनाने के लिए jarjar जैसे कुछ उपयोग कर सकते हैं या उपयोग की आसानी के लिए सभी निर्भर JARs को एक फ़ोल्डर में कॉपी कर सकते हैं। ऐसा लगता है कि एक्लिप्स के पास इस तरह की चीज करने के विकल्प भी हैं (ऊपर पोस्ट देखें)।

दूसरा विकल्प एक निर्भरता प्रबंधन प्रणाली जैसे Maven या Ivy का उपयोग करना होगा। इसमें उच्च शिक्षा वक्र है, लेकिन लाइब्रेरी के लिए यह सार्थक है क्योंकि यह आपकी लाइब्रेरी के उपयोगकर्ताओं को सभी निर्भरताओं को आसानी से पकड़ने की अनुमति देगा। एक अंतिम उपयोगकर्ता अनुप्रयोग के लिए, एक एकल वितरित करने की संभावना एक बेहतर विकल्प है (जिसके लिए आप आवेदक को आंतरिक रूप से निर्भर करने के लिए मेवेन या आइवी का उपयोग कर सकते हैं और फिर अपने अंतिम उपयोगकर्ताओं को वितरित करने के लिए जर्जर या Java Web Start जैसे कुछ)।

0

पर अच्छी तरह से समझाया गया है यदि आप मेवेन के साथ कर रहे हैं तो बस। आपको निम्नलिखित प्लगइन शामिल करने की आवश्यकता है।

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <properties> 
      <property> 
       <name>listener</name> 
       <value>com.example.TestProgressListener</value> 
      </property> 
     </properties> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> <!-- this is used for inheritance merges --> 
      <phase>package</phase> <!-- bind to the packaging phase --> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

और पढ़ें @how do I build JAR file with dependencies?

संबंधित मुद्दे