2012-04-30 17 views
11

से चलते समय क्लासपाथ में जार जोड़ना ठीक है, मुझे पता है कि इस सवाल से कई बार कई बार पूछा गया है, लेकिन मैंने इसे गॉगल किया है और उदाहरणों को देखा है और पिछले महीने के लिए SO पर प्रश्नों को देखा है, और मैं गंभीरता से काम करने के लिए यह नहीं मिल सकता है। मुझे लगता है कि समस्या यह है कि मैं ग्रहण और कमांड लाइन दोनों से प्रोग्राम चलाने में सक्षम होना चाहता हूं। मैं ओएसएक्स का भी उपयोग कर रहा हूं और मुझे लगता है कि मैं पढ़ रहे कई उदाहरण विंडोज/लिनक्स के लिए हैं।कमांड लाइन

मैं ऐसा करते हैं तो मैं एक साधारण ग्रहण में संकलित कार्यक्रम है कि मैं कमांड लाइन से चलाने के लिए करना चाहते हैं:

java -cp bin MyProgram 

मैं है किसी अन्य प्रोग्राम मैं संकलन और ग्रहण में चलाने के लिए, और इस संदर्भ देता MySQL JDBC कनेक्टर (mysql-connector-java-5.1.19-bin.jar) जो एक ही निर्देशिका में संग्रहीत है। यह ग्रहण से ठीक काम करता है, लेकिन मैं इसे कमांड लाइन से नहीं चला सकता।

मैं चीजों के सभी संयोजनों की कोशिश की है ...

java -classpath "bin;mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin\;mysql-connector-java-5.1.19-bin.jar MyProgram 

और वर्ग नहीं मिला त्रुटियों के सभी प्रकार मिलता है ...

Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram 
Caused by: java.lang.ClassNotFoundException: MyProgram 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
+0

हाय मैट, अगर मैं गलत नहीं कर रहा हूँ मुझे लगता है कि classpath मुख्य वर्ग आप निष्पादित करने के लिए चाहते हैं के लिए पथ घोषित करने के लिए है। तो इस मामले में यदि आपकी कक्षा बिन फ़ोल्डर में है तो मैं बस कोशिश करूंगा: जावा माइप्रोग्राम या जावा-सीपी myprogrampath MyProgram –

+1

@FedericoGiust विशेष रूप से नहीं; क्लासपाथ सिर्फ कक्षाओं के एक समूह के लिए एक संग्रह या पथ परिभाषित करता है। क्लासपाथ रननेबल क्लास को शामिल कर सकता है या नहीं हो सकता है (जो आमतौर पर अपवाद या सीधे java.exe त्रुटि में परिणाम देता है)। क्लासपाथ में निर्देशिका और अभिलेखागार शामिल हो सकते हैं जिनके पास चलने योग्य वर्ग नहीं हैं। – Qix

+0

[बाहरी .jar के साथ जावा कमांड लाइन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/6069702/java-command-line-with-external-jar) –

उत्तर

13

आपकी समस्या मिनी विभाजक है जिसका आप उपयोग कर रहे हैं। सेपरेटर ; विंडोज़ के लिए है। यूनिक्स प्रणालियों पर आप का उपयोग करना चाहिए : बजाय:

जावा -classpath "बिन: mysql-कनेक्टर-जावा-5.1.19-bin.jar" MyProgram

0

आप classpaht में अपने मुख्य वर्ग सेट नहीं किया यूनिक्स सिस्टम पर अपनी प्रविष्टियां अलग करने के लिए:, में -cp

+0

मुझे संदेह है कि वर्तमान निर्देशिका में इसकी मुख्य श्रेणी है, मुझे विश्वास होगा कि 'बिन' में वे शामिल हैं। –

+0

'माईप्रोग्राम' को क्लासपाथ में सेट किया जाना है, यदि आप पैकेज में 'मायप्रोग्राम' डालते हैं तो आपको पैचेज नाम जोड़ने की भी आवश्यकता है। – user1335794

+0

चिंता न करें, मुझे क्लासपाथ और पूरी तरह से योग्य नाम के बारे में पता है। मैं बस इतना कह रहा हूं कि क्लासपाथ में वर्तमान निर्देशिका जोड़ना बेकार है यदि उसकी कक्षाएं बिन निर्देशिका में स्थित हैं। –

5

उपयोग एक ./ जोड़ने की कोशिश '':

java -classpath "bin:mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin:mysql-connector-java-5.1.19-bin.jar MyProgram 

ग्रहण स्वचालित रूप से परिवर्तित हो जाता है।

+0

बचने का कोई कारण पेट? –

+0

नहीं, बस खराब कट/पेस्ट ... मैंने इसे – mprivat

-2

मैं अत्यधिक तुम --jar या जार कोशिश सुझाव है । मुझे याद नहीं है कि यह कौन सा है, लेकिन उन्हें आपको व्यवस्थित करना चाहिए। इसके अलावा, अगर आपके पास सेब से देव उपकरण हैं, तो उनके पास एक जार पैकेजर है।

+1

तय कर दिया है यह है, लेकिन obvisouly उसकी कक्षाओं को जारद नहीं कर रहे हैं। ऐप्पल देव उपकरण के बारे में भूल जाओ वे पिछले शताब्दी से हैं। ग्रहण, नेटबीन और इंटेलिजे उनसे हल्के सालों से आगे हैं। –

+0

@GuillamePolet Agrred, लेकिन मैंने केवल उनको जिक्र से ऐप्स बनाने के लिए उपयोगिता के साथ आने का उल्लेख किया –

1

देखें:

String pathSeparator = System.getProperty("path.separator");