2009-12-29 23 views
8

में सही ढंग से जावा classpath और JAVA_HOME की स्थापना मैं त्रुटिउबंटू

Exception in thread "main" java.lang.NoClassDefFoundError:

हो रही है जब मैं कोशिश करते हैं और Ubuntu पर एक संकलित वर्ग चलाते हैं। मैं एक बहुत ही सरल Helloworld उदाहरण का उपयोग कर रहा हूं, और इंटरनेट पर मौजूद लाखों प्रतिक्रियाएं बताती हैं कि मेरे क्लासस्पैट और जावा-एचओएमई चर गलत तरीके से सेट किए गए हैं।

हालांकि, मैं etc/पर्यावरण सही फ़ोल्डरों करने के साथ ही वर्तमान फ़ोल्डर संपादित किया है:

PATH=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

JAVA_HOME="/usr/lib/jvm/java-1.5.0-sun/"

CLASSPATH=".:/usr/lib/jvm/java-1.5.0-sun/lib"

और वे दिखाई देते हैं जब मैं सेट आदेश लिखें। किसी भी मामले में, यहां तक ​​कि जब मैं classpath मैन्युअल का उपयोग कर

sudo java -cp . myfirstjavaprog.class

मैं एक ही त्रुटि मिलती है निर्धारित किया है। मुझे और कहां देखना चाहिए? यह एक विन्यास समस्या होना चाहिए।

बहुत धन्यवाद

+0

http://www.cyberciti.biz/faq/set-environment-variable-linux/ –

उत्तर

6

आप अंत से .class को छोड़ना चाहते हैं। बस टाइप करें ...

java -cp . myfirstjavaprog 
+0

मैं इतना उदास हूं कि मैंने इसे नहीं देखा। – Huguenot

+4

हम में से सर्वश्रेष्ठ के लिए होता है। – Pace

1

नहीं, मुझे लगता है कि क्लासस्पैट पर्यावरण चर को नजरअंदाज कर दिया जाता है।

ऐसा करने का सही तरीका है जब आप संकलित और चलाते हैं -classpath विकल्प का उपयोग करना है। इसे प्रत्येक परियोजना के लिए सेट करें। आपकी आंखों के सामने आपके सबूत आपको बताते हैं कि ऐसा है।

क्लासस्पैट को अनदेखा क्यों किया जाता है? कई कारण:

  1. यह जावा 1.0 आर्टिफैक्ट है जो पक्ष से बाहर हो गया है।
  2. JVM की कोई गारंटी नहीं है कि आपने एक को एक पर्यावरण चर के रूप में सेट किया है।
  3. आईडीई की अपनी आवश्यकताएं हैं, इसलिए वे इस पर भरोसा नहीं करते हैं।
  4. जावा ईई ऐप सर्वर की अपनी आवश्यकताएं हैं, इसलिए वे इस पर भरोसा नहीं करते हैं।
  5. आपको हर बार पूरा रास्ता देना होगा क्योंकि प्रत्येक परियोजना अलग होने की संभावना है। एक बार जब आप "हैलो, वर्ल्ड" की प्रगति कर लेंगे तो आप खुद को स्क्रिप्टिंग करेंगे या एंटी और मेवेन जैसे टूल का उपयोग करेंगे जो आपको अपनी परियोजना के लिए क्लासस्पैट सेट करने में मदद करेंगे।
+0

यह एक बुरा विचार होगा .. क्योंकि हर बार उसे पूरा पथ – Anand

+0

देना होगा क्लासपाथ पर्यावरण चर क्यों अनदेखा कर रहे हैं? – Huguenot

+0

@ लक्ष्मणन - गलत। उन्हें सीखना होगा कि भविष्य में परियोजनाओं के लिए यह उचित तरीके से कैसे किया जाए, जिन्हें कमांड लाइन पर संकलित और चलाने की संभावना नहीं है। – duffymo

0

java_home चर सेट करने के लिए, यहां निर्देश दिए गए हैं।

http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html

और

classpath इसी तरह

+0

ये चर सेट किए गए हैं, लेकिन किसी कारण से उन्हें अनदेखा किया जा रहा है। मेरे पास कुछ प्रकार की वाक्यविन्यास समस्या होनी चाहिए। – Huguenot

+0

लिंक अब और काम नहीं कर रहा है .. अद्यतन करने पर विचार करें .. –

0

सेट किया जा सकता मैं दृढ़ता से आप कुछ समय बिताने के सूर्य ट्यूटोरियल पर देख सिफारिश करेंगे। यह बाद में आपकी मदद करेगा - वर्ग पथ कुख्यात परेशानी निर्माताओं हैं।

http://java.sun.com/docs/books/tutorial/getStarted/TOC.html

5

मैं दृढ़ता से अनुशंसा करते हो रही CLASSPATH वातावरण चर से छुटकारा, या कम से कम इसे से बाहर अपने JRE/JDK लेने।

"." तब तक क्लासपाथ में निहित है जब तक अन्यथा निर्दिष्ट नहीं किया जाता है। और जावा 1.3 के बारे में, जावा जावैक/जावा निष्पादन योग्य के निष्पादन पथ के आधार पर अपने स्वयं के रनटाइम और पुस्तकालयों को खोजने के लिए पर्याप्त स्मार्ट है। तब से, क्लासपाथ पर निर्दिष्ट करने के लिए, अगर यह गलत नहीं है, तो यह अनावश्यक रहा है। निश्चित रूप से .../lib गलत है, क्योंकि वहां केवल जार हैं, कोई कक्षा नहीं है, और जिन्हें क्लासपाथ से नहीं चुना जाता है, यदि वे व्यक्तिगत रूप से और स्पष्ट रूप से नामित नहीं होते हैं।

आधुनिक जावा इतने स्मार्ट हैं कि क्लासपाथ की रूट निर्देशिका में खड़े होने पर आप केवल java <classname> टाइप कर सकते हैं, और यह केवल ™ कार्य करेगा।

+0

आप काफी सही हैं, यह समस्या तब होती है जब मैं स्विंग घटकों को आयात करने वाली किसी भी चीज को संकलित और संकलित करता हूं, यह बिल्कुल वही त्रुटि देता है। जबकि HelloWorld.java उदाहरण ठीक है ... यह विचित्र लगता है। – Huguenot

+1

ओह ... ध्यान दें कि Windows सिस्टम क्लासपाथ में बैठे एक्जिक्यूटिव के साथ विंडोज़ बुरी तरह से अपंग जावा के साथ डिफ़ॉल्ट रूप से जहाजों को भेजता है। कृपया एक डॉस प्रॉम्प्ट से "जावा-वर्जन" करें और देखें कि जावा का संस्करण जो आप चल रहे हैं वह संस्करण वह संस्करण है जिसे आप चाहते हैं! –

+1

उबंटू के बारे में भी यही कहा जा सकता है; क्योंकि यह जीएनयू जावा के साथ जहाज करता है, (कम से कम उबंटू सिस्टम जो मैंने देखा है), सूर्य के जावा नहीं। 'के, यह "बुरी तरह अपंग" नहीं है - लेकिन यह सूर्य का जावा नहीं है। – NDP

1

आप सेब और संतरे मिश्रण कर रहे हैं। कमांड लाइन पर कच्चे जावा या जावैक आमंत्रण को क्लासपाथ की आवश्यकता होती है ताकि यह पता चल सके कि यह अपनी कक्षाओं तक पहुंच सकता है। जब आप

java -cp pathelement1:pathelement2... MyClass 

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

java -cp $CLASSPATH MyClass 

Inotherwords, इसकी सिर्फ एक शॉर्टकट classpath फिर से लिखें करने के रखने के लिए।

कई प्रोग्राम JAVA_HOME का उपयोग करने के लिए कॉन्फ़िगर किए गए हैं, लेकिन आखिरकार जावा प्रोग्राम चलाने के लिए केवल एक कॉन्फ़िगर किए गए क्लासपाथ और जावा के पथ की आवश्यकता होती है (वे इसे JAVA_HOME चर के माध्यम से पाते हैं, इसलिए आपको अभी भी चींटी जैसी चीज़ों की आवश्यकता है, लेकिन यह अभी भी ' अवधारणात्मक रूप से बस एक शॉर्टकट भी)।

आपका पाथ वह मार्ग है जहां सिस्टम द्विआधारी की तलाश करता है। यदि जावा आपके पथ पर नहीं है (टाइप करें "कौन सा जावा", यह आपको दिखाएगा कि कौन सा, यदि कोई है, तो जावा आपके रास्ते पर है) चल रहा/पूर्ण/पथ/से/जावा सिर्फ "जावा" चलाने के लिए समान है और सिस्टम है पाथ चर में बाइनरी पाएं।

0

ठीक है, मैं गलत जगह पर समस्या की तलाश में था। यह पता चला कि जावा ठीक था और मैं दो अलग-अलग समस्याओं के लिए एक ही त्रुटि प्राप्त करने का शिकार था।

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

जब मैंने हैलोवर्ल्ड उदाहरण चलाने की कोशिश की, तो मैंने गलती से .class एक्सटेंशन को शामिल किया था।

इन दोनों समस्याओं ने मुझे क्लास नॉटफाउंड त्रुटियां दीं।

आपकी सभी मदद के लिए बहुत बहुत धन्यवाद।

1

उपयोग

sudo update-java-alternatives -s java-6-openjdk 

यह classpath सामान का एक बहुत तय करता है।