2011-12-06 14 views
6

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

java -cp .;./* com.foo.MainClass 

कोड निष्पादित करता है और काम करता है का उपयोग कर जार निष्पादित करने के लिए प्रयास करें।

जब मैं निम्न आदेश का उपयोग कर जार पर अमल करने की कोशिश

java -cp .;./* -jar myjar.jar 

मैं कक्षा मिल कुछ जार जो myjar.jar को उसी फ़ोल्डर में हैं के लिए मिला execptions नहीं। मुझे आशा है कि -सीपी विकल्प में उन जारों को कक्षा पथ में शामिल किया जाएगा। मैंने java.class.path संपत्ति प्रिंट करने के लिए अपना कोड संशोधित किया। पहले मामले में यह वर्तमान निर्देशिका में सभी जार सूचीबद्ध करता है, दूसरे मामले में यह सिर्फ myjar.jar

मैंने सभी जारों के साथ क्लास-पथ तत्व जोड़ने के लिए मैनिफेस्ट को भी संशोधित किया। फिर दूसरा आदेश काम करता है। लेकिन मेरे कोड में मैं एक अरबी कक्षा लोड करने की कोशिश कर रहा हूं जिसका नाम कमांड प्रॉम्प्ट पर प्रदान किया गया है, इसलिए मैं वर्ग पथ को सभी जार को फ़ोल्डर में रखना चाहता हूं। मैं इस परिदृश्य में दूसरा कमांड कैसे काम करूं?

+0

[वनजर] (http://one-jar.sourceforge.net/) पर एक नज़र डालें। यह आपके सीपी मुद्दों को हल करना चाहिए। – flash

+0

@flash: शायद नहीं। वह कहता है कि वह संकलन समय पर अतिरिक्त वर्ग पथ नहीं जानता (अन्यथा वह इसे सिर्फ मैनिफेस्ट में जोड़ सकता है)। – Thilo

+1

लगता है जैसे आपको अपने स्वयं के क्लासलोडर का उपयोग करना है (जो आपके पर्यावरण के अनुसार चीजों को वापस जोड़ता है)। – Thilo

उत्तर

6

this से,

एक निष्पादन योग्य जार अन्य सभी निर्भर जार यह मैनिफ़ेस्ट फ़ाइल की कक्षा-पथ हेडर के माध्यम से की आवश्यकता संदर्भ होना चाहिए। पर्यावरण परिवर्तनीय क्लासस्पैट और कमांड लाइन पर निर्दिष्ट किसी भी वर्ग पथ को jVM द्वारा अनदेखा किया जाता है यदि -jar विकल्प का उपयोग किया जाता है।

+0

धन्यवाद! क्या इसका मतलब यह है कि अगर मैं एक अरबी कक्षा को लोड करना चाहता हूं जिसका जार फ़ाइल मेरे जार फ़ाइल (और मेरे मैनिफेस्ट में उल्लिखित नहीं) के समान स्थान पर मौजूद है, तो मुझे उस जार को स्पष्ट रूप से लोड करने के लिए URLClassLoader का उपयोग करने की आवश्यकता है? – mihirg

+0

ठीक है, आप अपने मेनिफेस्ट क्लासपाथ में 'प्लगइन्स/*' जैसे कुछ जोड़ सकते हैं। जार फ़ाइलों के लिए फ़ोल्डर तय किया जाएगा, लेकिन वहां के सभी जार उठाए जाने चाहिए। – Thilo

+0

या शायद नहीं: "हालांकि, क्लास पथ वार्डकार्ड क्लास-पथ जार-मेनिफेस्ट हेडर में सम्मानित नहीं हैं।" :-( – Thilo

0

आपको इससे निपटने के लिए अपने स्वयं के क्लासलोडर की आवश्यकता होगी। -jar केवल मानदंड और वाइल्डकार्ड में जानकारी की अनुमति नहीं है।

आप एक फिर से लोड करने उपयोगी वर्ग के उदाहरण मिल सकते हैं: http://www.exampledepot.com/egs/java.lang/ReloadClass.html

0

Here इस मुद्दे पर एक अच्छी चर्चा है।

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