जब

2010-05-26 17 views
33

मेरी रीडिंग से जार जावा चल रहा है, इस प्रकार जब आप एक आदेश पर अमल बाहरी जार शामिल हैं।जब

आगे, कमांड लाइन पर घोषित क्लासपाथ को भी अनदेखा किया जाता है। तो में:

java -classpath /usr/local/jar/foobar.jar -jar foo.jar 

/usr/local/jar/foobar.jar को नजरअंदाज कर दिया गया है।

अन्त में, मैंने पढ़ा है कि मैनिफ़ेस्ट फ़ाइल संबंधित पथ हो सकते हैं, जार फ़ाइल के भीतर।

तो, जार फ़ाइल में क्रियान्वित नहीं किया जा रहा है कि सिस्टम पर मौजूद हैं, तो आप बाहरी जार करने के लिए पूर्ण पथ शामिल है, लेकिन?

+3

"ध्यान दें:। स्थानीय नेटवर्क पर वर्ग या जार फ़ाइलों को कक्षा-पथ हैडर अंक, ** ** JAR फ़ाइल या इंटरनेट प्रोटोकॉल पर सुलभ वर्गों के भीतर फ़ाइलों जार नहीं एक जार फ़ाइल के भीतर जार फ़ाइलों में कक्षाओं लोड करने के लिए कक्षा पथ में, आपको उन वर्गों को लोड करने के लिए कस्टम कोड लिखना होगा। उदाहरण के लिए, यदि MyJar.jar में MyUtils.jar नामक एक और JAR फ़ाइल है, तो आप MyUtils में कक्षाओं को लोड करने के लिए MyJar.jar के मेनिफेस्ट में क्लास-पथ शीर्षलेख का उपयोग नहीं कर सकते हैं। कक्षा पथ में जार। " स्रोत: https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html –

उत्तर

37

वहाँ एक कारण है कि आप मुख्य वर्ग लागू परहेज कर रहे हैं जैसे

java -cp /usr/local/jar/foobar.jar:/some/other/path.jar com.your.main.classname 

?

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

+1

+1! ओरेकल/सूर्य को वास्तव में -जार विकल्प को बहिष्कृत करना चाहिए ... यह एक पुन: संक्रमित दुःस्वप्न है ... –

+4

कुछ परिदृश्यों में '-jar' का उपयोग करना काफी आसान हो सकता है, लेकिन यदि आपको लगता है कि सरलीकृत विकल्प आपको परेशानी दे रहा है तो यह हमेशा उस विकल्प पर फ़ॉलबैक करने का अर्थ है जो आपको कुल नियंत्रण देता है –

34

आप एक फ़ोल्डर बना सकते हैं, का कहना है कि लिब, जहाँ आप जार फ़ाइल फ़ोल्डर के भीतर।

MANIFEST.MF सामग्री हो सकता है:

Main-Class: com.mastergaurav.test.app.MainClass 
Class-Path: lib/one.jar lib/two.jar 

फ़ोल्डर सामग्री:

mainFolder/ 
    * lib/one.jar 
    * lib/two.jar 
    * my-main.jar 

पर अमल करने के लिए:

+2

बीटीडब्ल्यू, यदि आप जावा-सीपी/एडिशनल/क्लास/पथ -जर abcd.jar निष्पादित करते हैं, तो एडिशनल क्लासपाथ नहीं होगा अवहेलना करना। –

+3

आपको बिल्कुल पता नहीं है कि मैंने इसके लिए कितनी देर तक खोज की है। धन्यवाद। – Bogdan

+0

उत्कृष्ट स्पष्टीकरण! और, जिस तरह से गैर वाइल्डकार्ड समर्थित है, कितना दुखद .. –

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

  • कोई संबंधित समस्या नहीं^_^