2012-07-12 9 views
11

में क्लासपाथ में एकाधिक जार फ़ाइलों को कैसे जोड़ें ठीक है, मैं लिनक्स और कमांड लाइन के लिए बहुत नया हूं, और जावा के लिए बिल्कुल नया हूं। मुझे एक इंटर्नशिप एक जावा प्रोग्राम बनाया गया। अंत में मैंने इसे अपनी मशीन (विंडोज़) पर किया और अब मुझे इसे एक लिनक्स मशीन में माइग्रेट करना है और फिर इसे निष्पादन योग्य के रूप में चलाया जाना है। मैंने लिनक्स पर अधिक पढ़ाई और शोध किया है और क्लासपाथ को समझना है लेकिन अभी भी पूरी तरह से समझना बहुत मुश्किल है। यह अभी तक मेरे लिए अभी क्लिक नहीं कर रहा है। क्या कोई उदाहरण के प्रयोग से सरलीकृत तरीके से कक्षा के उद्देश्य को समझा सकता है? मेरे लिए सबसे भ्रमित पहलुओं में से एक वास्तव में जार के भौतिक मार्ग को परिभाषित कर रहा है। क्या मैं usr से सभी तरह से शुरू करता हूं या क्या मुझे केवल jvm फ़ोल्डर से शुरू करने की आवश्यकता है? यदि यह मायने रखता है, तो मेरा जावा प्रोग्राम जेवीएम फ़ोल्डर में स्थित नहीं है। क्या कोई मेरे लिए कुछ प्रकाश डाल सकता है?लिनक्स

संपादित करें: आपकी मदद के लिए लोगों को बहुत धन्यवाद, मैं यह नहीं कह सकता कि मैं स्पष्ट रूप से स्पष्ट हूं लेकिन मेरी स्थिति की मेरी समझ बहुत बेहतर है।

+0

[संभवतः जावा क्लासपाथ के भीतर निर्देशिका में सभी जार सहित) का संभावित डुप्लिकेट (https://stackoverflow.com/questions/219585/including-all-the-jars-in-a- निर्देशिका -within-the-java-classpath) – Stewart

उत्तर

10

आप -classpath तर्क का उपयोग करते हैं। आप या तो एक रिश्तेदार या पूर्ण पथ का उपयोग कर सकते हैं। इसका अर्थ यह है कि आप अपनी वर्तमान निर्देशिका से संबंधित पथ का उपयोग कर सकते हैं, या आप एक पूर्ण पथ का उपयोग कर सकते हैं जो रूट / पर शुरू होता है।

उदाहरण:

bash$ java -classpath path/to/jar/file MyMainClass 

इस उदाहरण main समारोह MyMainClass में स्थित है और जार फ़ाइल में कहीं शामिल किया जाएगा में।

संकलन आप उपयोग करने की आवश्यकता javac

उदाहरण के लिए:

bash$ javac -classpath path/to/jar/file MyMainClass.java 

तुम भी वातावरण चर के माध्यम से classpath निर्दिष्ट कर सकते हैं, का पालन करें :

bash$ export CLASSPATH="path/to/jar/file:path/tojar/file2" 
bash$ javac MyMainClass.java 

किसी भी सामान्य रूप से जटिल जावा के लिए प्रोजेक्ट आपको build.xml

नामक एंटी स्क्रिप्ट की तलाश करनी चाहिए
+1

तो यदि जावा प्रोग्राम मैं संकलित करने की कोशिश कर रहा हूं तो इसका नाम स्नोर्ट मॉनिटर नामित होगा: bash $ java -classpath path/to/jar/file SnortMonitor –

+1

आह आपको संकलित करने के लिए आह 'जावा' के बजाय 'जावैक' को कॉल करने के लिए, लेकिन आप अभी भी-क्लासपाथ और स्रोत निर्देशिका का उपयोग करते हैं। – Petriborg

+0

आपकी मदद के लिए धन्यवाद, लेकिन क्या आप कृपया थोड़ा और विशिष्ट हो सकते हैं? शायद यह मेरी समझ की कमी के कारण है। जब मैं "javac SnortMonitor.java लिखता हूं, मुझे त्रुटियों की एक सूची मिलती है और मुझे इसकी जानकारी है क्योंकि मुझे jsendnsca नामक निर्देशिका से 2 जार फ़ाइलों को शामिल करने की आवश्यकता है।जब भी मैं प्रोग्राम संकलित करता हूं और चलाता हूं, क्या मुझे कक्षाओं में उन जारों को कक्षापंथ में शामिल करने की आवश्यकता है? –

5

क्लासपाथ वह स्थान है जहां जावा कंपाइलर (कमांड: जावा) और JVM (कमांड: जावा) आपके अनुप्रयोग संदर्भ वाले वर्गों को खोजने के लिए दिखते हैं। किसी अन्य वर्ग को संदर्भित करने के लिए किसी एप्लिकेशन के लिए इसका क्या अर्थ है? सरल शब्दों में यह अपने कोड में कहीं उस वर्ग का उपयोग करने का अर्थ है:

उदाहरण:

public class MyClass{ 
    private AnotherClass referenceToAnotherClass; 
    ..... 
} 

जब आप यह (javac) संकलित करने के लिए संकलक AnotherClass वर्ग की आवश्यकता होगी प्रयास करें। वही जब आप अपना एप्लिकेशन चलाने का प्रयास करते हैं: JVM को अन्य क्लास क्लास की आवश्यकता होगी। इस वर्ग को खोजने के लिए javac और JVM किसी विशेष (सेट) स्थान (स्थानों) में दिखता है। उन स्थानों को क्लासपाथ द्वारा निर्दिष्ट किया गया है जो लिनक्स पर एक कॉलन अलग-अलग निर्देशिकाओं की निर्देशिका है (निर्देशिका जहां javac/JVM को किसी अन्य क्लास को ढूंढने के लिए देखना चाहिए)।

तो अपनी कक्षा को संकलित करने के लिए और फिर इसे चलाने के लिए, आपको यह सुनिश्चित करना चाहिए कि क्लासपाथ में अन्य क्लास क्लास वाली निर्देशिका है। तो फिर तुम इसे इस तरह आह्वान:

javac -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass.java //to compile it 
java -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass //to run it 

आमतौर पर वर्गों "समूह" जार फ़ाइलें/पुस्तकालयों कहा जाता है के रूप में आते हैं।इस मामले में आप यह सुनिश्चित करें कि जार AnotherClass क्लास वाली अपनी classpaht पर है बनाने के लिए है:

javac -classpath "dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass.java //to compile it 
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass //to run it 

आप ऊपर के उदाहरण में कैसे एक वर्ग को संकलित करने के (MyClass.java) देख सकते हैं कार्यशील निर्देशिका में स्थित है और फिर संकलित कक्षा चलाएं (क्लासपाथ की शुरुआत में "।" नोट करें जो वर्तमान निर्देशिका के लिए खड़ा है)। इस निर्देशिका को कक्षापथ में भी जोड़ा जाना है। अन्यथा, JVM इसे ढूंढने में सक्षम नहीं होगा।

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

उदाहरण:

java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" MyClass //to run it 

या अधिक सामान्य (कुछ पैकेज पदानुक्रम कल्पना करते हुए):

java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" package.subpackage.MyClass //to run it 

आदेश हर classpath सेटिंग आप एक आवेदन चलाना चाहते हैं से बचने के लिए आप एक वातावरण चर को परिभाषित कर सकते क्लास्स्पैट कहा जाता है।

linux में, कमांड प्रॉम्प्ट में:

export CLASSPATH="dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" 

या ~/.bashrc संपादित करें और अंत में कहीं न कहीं इस लाइन को जोड़ने;

हालांकि, कक्षा पथ लगातार परिवर्तनों के अधीन है, इसलिए हो सकता है कि आप क्लासपाथ को डीआईआर के कोर सेट पर सेट करना चाहें, जिसे आपको अक्सर चाहिए और फिर उस सत्र के लिए प्रत्येक बार क्लासपाथ को विस्तारित किया जाए। इस तरह:

export CLASSPATH=$CLASSPATH:"new directories according to your current needs" 
+0

क्या मुझे संकलन और चलाने के लिए हर बार इन क्लासपाथ को परिभाषित करना होगा? –

+0

मैंने अपना जवाब संपादित किया – Razvan

16

कहें कि आपके पास एकाधिक jar फ़ाइलें a.jar, b.jar और c.jar हैं। उन्हें classpath को जोड़ने के लिए है, जबकि संकलन आपको बस इतना करना

$javac -cp .:a.jar:b.jar:c.jar HelloWorld.java 

चलाने के लिए

$java -cp .:a.jar:b.jar:c.jar HelloWorld 
0

चरण 1.

vi ~/.bashrc 

चरण 2. संलग्न इस लाइन कर पिछले पर:

export CLASSPATH=$CLASSPATH:/home/abc/lib/*; (Assuming the jars are stored in /home/abc/lib) 

चरण 3.

source ~/.bashrc 

इन चरणों के बाद सीधे अनुपालन और अपने कार्यक्रम चलाएं (उदा। javac xyz.java)