2010-02-15 13 views
6

क्या यह एक जेएआर फ़ाइल बनाना संभव है जिसके लिए बाहरी निर्भरताओं की आवश्यकता है बिना जार फ़ाइल में उन निर्भरताओं को शामिल किए?बाहरी निर्भरताओं को शामिल किए बिना जेएआर फ़ाइल बनाएं

मेरा google-fu मुझे जवाब देने में विफल रहा है; जो कुछ भी मैंने पाया है, वह दिखाता है कि उन्हें जेएआर फ़ाइल में कैसे शामिल किया जाए, लेकिन यह नहीं कहने के लिए कि "मुझे उन्हें नहीं मिला है, उपयोगकर्ता के क्लासपाथ में देखें"। मुझे लगता है कि निर्भरता उपयोगकर्ता के क्लासपाथ पर ठीक तरह से स्थापित और कॉन्फ़िगर की गई है।

मेरे मामले में, मेरी निर्भरता अपाचे कॉमन्स सीएलआई और मैथ हैं।


संपादित करें: मेरी JAR फ़ाइल के अंदर, मैं Main.class है।

मेरे मैनिफ़ेस्ट फ़ाइल लगता है:

Manifest-Version: 1.0 
Created-By: 1.6.0 (Sun Microsystems Inc.) 
Main-Class: Main 

मेरे CLASSPATH

.;C:\Program Files\Java\jre1.6.0_06\lib\ext\QTJava.zip;C:\java_lib\commons-cli-1.2.jar;C:\java_lib\commons-math-2.0\commons-math-2.0.jar 

तरह लग रहा है अगर मैं /lib में जार में निर्भरता शामिल हैं और प्रकट करने के लिए लाइन Class-Path: lib/commons-math-2.0.jar lib/commons-cli-1.2.jar जोड़ें, फिर यह करता है काम।

मैं सिर्फ यह है कि अगर काम करेगा देखने के लिए जार में फ़ाइलों को शामिल किए बिना प्रकट करने के लिए Class-Path: commons-math-2.0.jar commons-cli-1.2.jar जोड़ने की कोशिश की है, लेकिन ऐसा नहीं किया।

उत्तर

3

में Class-Path प्रविष्टि का उपयोग करके यह बताने के लिए कि आपके जेएआर के अपेक्षाकृत निर्भरता कहां देखना है। उदाहरण के लिए:

Class-Path: servlet.jar ../foo/bar.jar acme/beans.jar 
+0

लेकिन मैं नहीं जानता कि वे कहाँ हैं, सिवाय इसके कि वे उपयोगकर्ता के कंप्यूटर के classpath में मौजूद हैं। – masher

+0

@masher बंडल सब कुछ एक ज़िप में है ताकि आपके पास स्थान का नियंत्रण हो। अन्यथा, यह सिर्फ तुम्हारे लिए नहीं है। बेहतर है कि उपयोगकर्ता को उस मामले में मैन्युअल रूप से अपना वर्ग पथ सेट करने के लिए कहें। –

+0

@masher: यदि आप नहीं जानते कि वे कहां हैं, तो आपको उन्हें बिल्कुल सूचीबद्ध नहीं करना चाहिए, लेकिन दस्तावेज़ को उपयोगकर्ता को अपने जार के बगल में कक्षा के स्थान पर रखना होगा। – Fredrik

3

यह निश्चित रूप से संभव है। इसके बारे में सोचने का एक तरीका यह है कि हर बार जब आप जार बनाते हैं, तो आप जेरे में कक्षाओं के आधार पर होते हैं, और उन्हें अपने जार में शामिल करना जरूरी नहीं है। जेआर स्वचालित रूप से कक्षा के लिए उनकी तलाश करेगा। यदि वे नहीं मिले हैं तो आपको NoClassDefFoundError दिखाई देगा।

+2

+1। एकेएफ की तरह, आपको कुछ भी करने की ज़रूरत नहीं है, जब तक कि उपयोगकर्ता का क्लासपाथ सही न हो। मेनिफेस्ट में प्रविष्टियां रखना क्लासपाथ में जोड़ने का एक तरीका है। –

+0

मैं देख सकता हूं कि मुझे कुछ भी नहीं करना चाहिए, बस इतना है कि मैं इसे काम नहीं कर सकता! ओह ठीक है, इस विशेष मामले में, यह केवल एक अतिरिक्त ~ 130 केबी है, इसलिए मैं जार में पुस्तकालयों सहित ... – masher

+0

सहित रह सकता हूं और आप क्लासपाथ में जावा कमांडलाइन पर अपनी निर्भरताओं की पहचान कर रहे हैं? – akf

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