Java.lang.UnsupportedClassVersionError को कैसे ठीक करें: असमर्थित प्रमुख.नंबर संस्करण


1571

मैं नोटपैड ++ का उपयोग करने की कोशिश कर रहा हूं क्योंकि मेरा ऑल-इन-वन टूल एडिट, रन, कंपाइल आदि है।

मेरे पास JRE स्थापित है, और मैंने अपना पथ चर .../binनिर्देशिका में स्थापित किया है।

जब मैं नोटपैड ++ में अपनी "हैलो वर्ल्ड" चलाता हूं, तो मुझे यह संदेश मिलता है:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

मुझे लगता है कि यहाँ समस्या संस्करणों के बारे में है; जावा के कुछ संस्करण पुराने या बहुत नए हो सकते हैं।

  1. मैं इसे कैसे ठीक करूं?
  2. क्या मुझे JDK स्थापित करना चाहिए, और JRE के बजाय JDK के लिए अपना पथ चर सेट करना चाहिए?
  3. PATHJRE या JDK में चर के बीच अंतर क्या है ?

क्या आपने jdk भी स्थापित किया है? jre जावा रनटाइम वातावरण है, java apps बनाने के लिए, आपको jdk की भी आवश्यकता है
CyprUS

हाँ, मैंने किया, और अब मेरा पथ चर जहाँ jdk है, को इंगित करता है। अभी तक मेरे पास यह "असमर्थित मामूली संस्करण 51.0" त्रुटि है, क्या आपको लगता है कि मुझे पुराने संस्करण को jdk स्थापित करना चाहिए? im jdk 1.7.0 का उपयोग करके
ERJAN

20
मैक ओएस एक्स पर मेरे साथ ऐसा हुआ जब मुझे इन दिनों OSX पर अजीब Apple java 6 और Oracle java 7 स्थिति के कारण समस्या हो रही थी। लघु संस्करण: JDK7 के साथ संकलित करें, JDK6 के साथ चलाएँ, इसे प्राप्त करें।
वॉरेन पी


5
एल कैप्टन के लिए, इस जवाब ने इसे मेरे लिए तय किया: stackoverflow.com/a/34201991/1615594
tsuz

जवाबों:


1938

दिखाया गया वर्जन नंबर JRE का वर्जन है जो क्लास फाइल के अनुकूल है।

सूचित प्रमुख संख्याएँ हैं:

Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(स्रोत: विकिपीडिया )

वास्तविक समस्या को ठीक करने के लिए आपको या तो जावा कोड को जावा JRE के नए संस्करण के साथ चलाने का प्रयास करना चाहिए या संकलक को पहले जावा संस्करणों के साथ संगत कोड बनाने के लिए जावा कंपाइलर को लक्ष्य पैरामीटर निर्दिष्ट करने का निर्देश देना चाहिए।

उदाहरण के लिए, जावा 1.4 के साथ संगत क्लास फाइलें उत्पन्न करने के लिए, निम्न कमांड लाइन का उपयोग करें:

javac -target 1.4 HelloWorld.java

जावा कंपाइलर के नए संस्करणों के साथ आपको बूटस्ट्रैप क्लास पथ सेट नहीं होने के बारे में चेतावनी मिलने की संभावना है। इस त्रुटि के बारे में अधिक जानकारी बूटक्लासपैथ के बिना एक पुराने स्रोत को सेट करने के लिए एक ब्लॉग पोस्ट न्यू जेवैक चेतावनी में उपलब्ध है ।


167
"संस्करण संख्या दर्शाती है कि जावा को कोड संकलित करने के लिए किस संस्करण का उपयोग किया गया है।" नहीं, यह नहीं है। यह JRE के संस्करण को दिखाता है कि वर्ग फ़ाइल संगत है। क्रॉस-संकलन विकल्पों का उपयोग करके आप 1.1 के वर्ग संस्करण (1.7 के माध्यम से) के साथ कोड संकलन करने के लिए 1.7 JDK का उपयोग कर सकते हैं।
एंड्रयू थॉम्पसन

85
यह उत्तर यह नहीं बताता है कि इसे कैसे ठीक किया जाए जैसा कि सवाल पूछा गया है?
जोनाथन लेउंग

7
यह सीधे ग्रहण से पिछले संस्करण को संकलित करने के लिए एक अच्छा समाधान है: stackoverflow.com/a/16345710/2091700
अल्फा

19
ग्रहण परियोजना में => प्रक्रिया => जावा संकलक; "संकलक अनुपालन स्तर" को अपने jre या jdk के अनुसार संस्करण में सेट करें। मेरे लिए, यह 1.6 के लिए 1.6 है
सैम

5
यह तब हो सकता है जब संकलक स्रोत वर्तमान में JRE / JDK संकलन के साथ गैर-अनुपालन में सेट किया गया हो। उदाहरण के लिए, मैंने ग्रहण के मानों को नीचे से पाया। ssettings फ़ोल्डर, org.eclipse.jdt.core.compiler.compliance = 1.7, org.eclipse.jdt.core.compiler.source = 1.7, org.eclipse.jdt.core.compiler .codegen.targetPlatform = 1.7। और मेरा कंपाइलर 1.6.0_32 था। मूल्यों को 1.6 में बदलने के बाद समस्या का समाधान किया गया था। समस्या उत्पन्न होने के बाद मैंने प्रोजेक्ट को एक अलग कार्यक्षेत्र से कॉपी किया जहाँ मैं JDK 1.7 :(
Gana

366

java.lang.UnsupportedClassVersionError संकलन समय के दौरान अधिक JDK और रनटाइम के दौरान JDK कम होने के कारण होता है।


11
+1: इस प्रतीकात्मक लिंक को बदलने के लिए ( /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java) javac के संकलन के लिए प्रयुक्त संस्करण ने इसे हल किया
ezdazuzena

1
मैं उपरोक्त परिवर्तन कैसे कर सकता हूं?
अंकुर राययानी १४'१३ को १२:५०

8
परियोजना -> गुण -> जावा संकलक परियोजना विशिष्ट सेटिंग्स सक्षम करें। फिर 1.7, 1.6 या 1.5 के लिए कंपाइलर कंप्लायंस लेवल का चयन करें, अपने ऐप का निर्माण और परीक्षण करें।
विवेक कुमार रे

जब मैं जावा 7 में चला गया, तो किसी तरह ग्रहण जावा 6 में चलने की कोशिश करता रहा ... पता नहीं क्यों। पुराने JDK को अनइंस्टॉल कर दिया मेरे लिए चाल।
एचडीवी

9
@ezdazuzena sudo update-alternatives --config javaऐसा करने के लिए उपयोग करते हैं।
थोरबजोरन रेव एंडरसन

115

ग्रहण में, मैं सिर्फ मेनू कमांड विंडो में गया -> प्राथमिकताएं -> जावा -> संकलक और फिर "कंपाइलर अनुपालन स्तर" को 1.6 पर सेट करें।


3
ग्रहण में, कुछ समय के प्रोजेक्ट पहलुओं को भी उपयुक्त जावा संस्करण में बदलना होगा।
बिलाल मिर्ज़ा

6
धन्यवाद। यह ध्यान देने योग्य है कि ग्रहण के डिफ़ॉल्ट निष्पादन वातावरण (निर्माण पथ पर जाने वाला JRE) एक अलग सेटिंग है। मैंने JRE सेट किया था लेकिन संकलक अनुपालन स्तर नहीं; इसने इसे ठीक कर दिया।
व्रचिनिन

और आपने त्रुटि संदेश से निष्कर्ष कैसे निकाला कि यह विकल्प सेट करने के लिए सही जगह थी?
अलेक्जेंडर

हो सकता है कि यह: stackoverflow.com/questions/7073485/… यदि आप चींटी और ग्रहण का उपयोग कर रहे हैं तो मदद कर सकते हैं।
औउजीआईआई

सवाल नोटपैड ++ के बारे में है लेकिन एक्लिप्स के बारे में नहीं।
gotwo

60

चिंता मत करो, मैं इसे हल कर दिया।

यह वास्तव में सरल है - आपको उसी संस्करण के साथ BOTH JRE / JDK को स्थापित करने की आवश्यकता है।

JRE 6 -> JDK 6

JRE 7 -> JDK 7

और इसी तरह।


29
java 7 6 को बिना किसी समस्या के भी संभाल सकता है।
डेमियनिक्स

@damienix आप शायद यह बताना चाहते हैं कि जावा 7 जेआरई 6 जावा संकलित वर्ग को बिना किसी समस्या के संभाल सकता है, अन्यथा आपके बयान से भ्रम पैदा होता है।
फ्रंटियर

43

इस त्रुटि का मतलब है कि आप जावा "क्लास" फ़ाइल को लोड करने का प्रयास कर रहे हैं जिसे जावा के नए संस्करण के साथ संकलित किया गया था जो आपने स्थापित किया है।

उदाहरण के लिए, आपकी .classफाइल JDK 7 के लिए संकलित की जा सकती है, और आप इसे JDK 6 के साथ चलाने की कोशिश कर रहे हैं।

तो समाधान या तो है:

  • अपने जावा रनटाइम को अपग्रेड करें या
  • यदि आपके पास स्रोत है, तो अपने स्थानीय जावा कंपाइलर (यदि आपके पास एक है) का उपयोग करके कक्षा को पुन: व्यवस्थित करें।

    javac FileName.java

डेवलपर्स के लिए, यह तब हो सकता है यदि कोई अन्य डेवलपर एक .class फ़ाइल में जांच करता है, और उन्हें आपके पास जावा का एक नया संस्करण मिला है!


22

आप अपने प्रोग्राम को जावा संस्करण के साथ चलाने की कोशिश कर रहे हैं जो उस संस्करण का समर्थन नहीं करता है जिसमें कोड संकलित किया गया था। इसलिए मूल रूप से आपने अपने कोड को एक उच्च संस्करण के साथ संकलित किया होगा और इसे कम संस्करण का उपयोग करके चलाने की कोशिश कर रहे होंगे।

जैसा तुम पा रहे हो

Unsupported major.minor version 51.0

और संस्करण 51.0 J2SE 7 से मेल खाता है, आपने संभवतः जावा 7 में अपना कोड संकलित किया है और इसे कम संस्करण का उपयोग करके चलाने की कोशिश कर रहे हैं। क्या java -versionप्रदर्शित करता है की जाँच करें । यह जावा 7 संस्करण होना चाहिए। यदि PATH / JAVA_HOME में उचित परिवर्तन नहीं किया गया है। या आप उसी संस्करण के साथ संकलन कर सकते हैं जिसे आप कोड चलाने की कोशिश कर रहे हैं। यदि कॉन्फ़िगरेशन भ्रमित कर रहे हैं तो आप हमेशा पूर्ण पथ दे सकते हैं /home/user/jdk1.7.0_11/bin/javacऔर /home/user/jdk1.7.0_11/bin/java


18

मेरे पास मैक पर एक समान स्थिति थी, और निम्नलिखित प्रक्रिया ने मेरे लिए काम किया:

टर्मिनल में, टाइप करें

vi ~/.profile

फिर इस लाइन को फाइल में जोड़ें, और सेव करें

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

जहां संस्करण जैसे आपके कंप्यूटर पर एक है, 1.7.0_25

संपादक से बाहर निकलें, फिर निम्न कमांड टाइप करें जो इसे प्रभावी बनाता है

source ~/.profile 

फिर परिणाम जांचने के लिए जावा -वर्जन टाइप करें

java -version 

.profileफाइल क्या है ?

.profile फ़ाइल एक छिपी हुई फ़ाइल है। यह एक वैकल्पिक फ़ाइल है, जो उस सिस्टम को बताती है जो उस उपयोगकर्ता को चलाने के लिए आदेश देता है, जिसकी प्रोफ़ाइल फ़ाइल में यह उपयोगकर्ता लॉग इन करता है। उदाहरण के लिए, यदि मेरा उपयोगकर्ता नाम bruno है और उसकी सभी सामग्रियों में / Users / bruno / में एक .profile फ़ाइल है। लॉग-इन प्रक्रिया के दौरान निष्पादित किया जाएगा।

स्रोत: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515


16

ग्रहण के मेनू विंडो में -> वरीयताएँ -> जावा -> संकलक जाँच "प्रोजेक्ट विशिष्ट सेटिंग्स कॉन्फ़िगर करें" भी।

यदि आपके पास stil में एक ही Java संस्करण के साथ त्रुटि है: अपने प्रोजेक्ट के बिल्ड फ़ोल्डर को मैन्युअल रूप से हटाने का प्रयास करें। फिर ग्रहण को पुनः आरंभ करें।


14

आपके पास जावा 7 में संकलित कुछ JAR लाइब्रेरी हो सकती है, और आपके पास जावा रनटाइम के रूप में केवल जावा 6 है। यह कुछ नए पुस्तकालयों के साथ हो सकता है।


14

JAVA_HOMEयदि आपके द्वारा एकाधिक इंस्टॉल किए गए हैं, तो सबसे आम समस्या आपके चर का गलत रूपांतरण है, जो सही जावा डेवलपमेंट किट लाइब्रेरी की ओर इशारा करता है।

यह जानने के लिए कि एसडीके जावा फ़ोल्डर कहाँ स्थित है, निम्नलिखित कमांड चलाएँ:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian / Ubuntu

यह जाँचने के लिए कि आपने कौन सा जावा (ओपनज्डक) स्थापित किया है, के माध्यम से जांचें:

dpkg -l "openjdk*" | grep ^i

या:

update-java-alternatives -l

इसे बदलने के लिए, उपयोग करें:

update-alternatives --config java

sudoयदि आवश्यक हो तो उपसर्ग ।

वैकल्पिक जावा संस्करण का चयन करने के लिए।

या जाँच करें जो स्थापित करने के लिए उपलब्ध हैं:

apt-cache search ^openjdk

sudoयदि आवश्यक हो तो उपसर्ग ।

तो आप स्थापित कर सकते हैं, उदाहरण के लिए:

apt-get install openjdk-7-jre

sudoयदि आवश्यक हो तो उपसर्ग ।

फेडोरा, ओरेकल लिनक्स, रेड हैट

के माध्यम से उचित पैकेज स्थापित / अपग्रेड करें:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

java-1.7.0-openjdkपैकेज सिर्फ जावा रनटाइम एनवायरनमेंट में शामिल है। यदि आप जावा प्रोग्राम विकसित करना चाहते हैं तो java-1.7.0-openjdk-develपैकेज स्थापित करें ।

बीएसडी

FreeBSD पोर्ट्स संग्रह में OpenJDK 7 पैकेज है, जिसे Openjdk7 कहा जाता है, जिसे संभवतः पुन: कॉन्फ़िगर किया जाना है।

देखें: OpenJDK विकि पृष्ठ

खिड़कियाँ

ओरेकल साइट से उचित जावा एसई डेवलपमेंट किट लाइब्रेरी स्थापित करें या इंस्टॉल करें

जेनकींस

यदि आप जेनकिन्स के साथ इस समस्या का सामना कर रहे हैं, तो देखें:

हालाँकि, जावा (नया) के सही संस्करण का चयन update-alternativesकरना चाहिए।


क्लाउडर के साथ क्लस्टर में स्पार्क सेवा को जोड़ने के बाद एक होस्ट पर स्पार्क 2-शेल का उपयोग करने की कोशिश करते समय इस जवाब ने मेरे लिए काम किया।
Alter

12

मुझे उसी समस्या का सामना करना पड़ा जब मैं अपने आवेदन के निर्माण के लिए एक चींटी स्क्रिप्ट के साथ काम कर रहा था ।

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

मैंने चींटी स्क्रिप्ट को उस खंड में संशोधित किया है जहां यह जावा फाइलों को संकलित करता है।

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

इसने मेरे लिए असमर्थित प्रमुख छोटी समस्या को हल करने के लिए काम किया।



12

मुझे 1.7 में लिखे गए प्रोजेक्ट के साथ भी यही समस्या आई और 1.6 में निष्पादित करने का प्रयास किया गया।

ग्रहण में मेरा समाधान:

  • अपने प्रोजेक्ट गुण -> जावा बिल्ड पाथ -> लाइब्रेरी पर राइट क्लिक करें

  • अपनी JRE सिस्टम लाइब्रेरी का चयन करें और दाईं ओर संपादित करें पर क्लिक करें , और लक्ष्य JRE चुनें।

  • अब बाईं ओर जावा कंपाइलर पर जाएं, और कंपाइलर अनुपालन स्तर को अपने लक्ष्य में बदलें ।

मेरे लिए यही काम किया।


11

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

ग्रहण मेनू में विकल्प बदलने से मूल पोस्टर का उत्तर नहीं मिलता है, जिसने कहा कि वह ग्रहण का उपयोग नहीं कर रहा है। OpenJDK javac संस्करण 1.7 पर, यदि आप मापदंडों का उपयोग करते हैं, तो आप 1.6 के लिए crosscompile कर सकते हैं -sourceऔर -targetसाथ ही, संकलन समय पर लक्ष्य संस्करण के rt.jar -file (जो कि पुराना है) प्रदान करते हैं। यदि आप वास्तव में 1.6 JRE स्थापित करते हैं, तो आप इसकी स्थापना (उदाहरण के लिए, /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar पर Ubuntu, / usr / jdk / jdk1) को इंगित कर सकते हैं। जाहिरा तौर पर SunOS पर 6.0_60 / jre / lib / rt.jar। क्षमा करें, मुझे नहीं पता कि यह विंडोज सिस्टम पर कहां है)। इस तरह:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

ऐसा लगता है कि आप इंटरनेट से बस rt.jar डाउनलोड कर सकते हैं, और इसे इंगित कर सकते हैं। हालांकि यह बहुत सुंदर नहीं है:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java

10

इस पर आधारित...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

ग्रहण में, पैकेज एक्सप्लोरर में प्रोजेक्ट पर राइट क्लिक करें:

बिल्ड पथ -> बिल्ड पथ कॉन्फ़िगर करें

के अंतर्गत:

जावा बिल्ड पाथ -> लाइब्रेरी -> लाइब्रेरी जोड़ें -> जेआरई सिस्टम लाइब्रेरी -> इंस्टॉल्ड जेआरई -> सर्च

खोज पूर्ण होने के बाद उपलब्ध सूची में लाइब्रेरी का चयन करके आवश्यक JRE जोड़ें।


10
  • यदि आप मावेन का उपयोग करते हैं, तो अपने जावा संकलन स्तर को सेट करें। कमांड लाइन खोलें और java -versionअपने संकलन स्तर के लिए लिखें :

    यहां छवि विवरण दर्ज करें

  • यदि आप IntelliJ IDEA का उपयोग करते हैं, तो प्रोजेक्ट → फ़ाइलसेटिंग्सबिल्ड एक्ज़ेक्यूशन डिप्लॉयमेंटकंपाइलरजावा कंपाइलर का चयन करें । फिर बाइट कोड को 1.7 इस छवि की तरह बदलें:

    यहां छवि विवरण दर्ज करें


मुझे पोम बदलने के बाद मावेन क्लीन इंस्टाल करने की जरूरत थी।
जो बोरिसको

10

यदि आप मावेन का उपयोग करते समय इस समस्या का सामना कर रहे हैं , तो आप प्लग-इन मावेन कंपाइलर का उपयोग करके अपना कोड संकलित कर सकते हैं ।

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

अद्यतन: सेट sourceऔर targetकरने के लिए 1.8, यदि आप JDK 8 का उपयोग कर रहे हैं।


क्रॉस-कंपाइल करने के लिए प्लगइन का उपयोग कैसे करें पर एक स्निपेट लिंक पर जाने / खोलने के बजाय बहुत अच्छा होगा
कोडिंग_डॉट

8

मुझे ग्रहण से चींटी चलाते समय एक ही त्रुटि संदेश था, लेकिन यहां वर्णित अन्य समाधानों ने मेरी समस्या का समाधान नहीं किया। मजेदार बात यह थी कि विंडोज कमांड लाइन से चींटी चलाना ठीक चल रहा था, इसलिए इसे ग्रहण के भीतर एक कॉन्फ़िगरेशन मुद्दा बनना पड़ा।

यह पता चला कि ग्रहण के तहत आप पर्यावरण को निर्दिष्ट कर सकते हैं कि चींटी के साथ चलना चाहिए और यह एक जेडीके के बजाय एक जेआरई के रूप में सेट किया गया था।

  • पर जाएं: भागो -> बाहरी उपकरण -> बाहरी उपकरण विन्यास ...
  • अपनी परियोजना के लिए चींटी build.xml चुनें (यदि आपके पास कई परियोजनाएं हैं)
  • टैब 'JRE' को सक्रिय करें
  • यहाँ 'अलग JRE: jre6' चुना गया था। जब मैंने इसे 1.6 या 1.7 श्रृंखला से एक जेडीके में बदल दिया, तो त्रुटि हो गई थी।

8

मैं इसे कैसे ठीक करूं?

इस त्रुटि का अर्थ है कि आपके वर्ग कोड को निष्पादित करने के लिए जिस JRE का उपयोग किया जा रहा है, वह उपयोग किए गए जावा के संस्करण को नहीं पहचानता है। आमतौर पर क्योंकि जावा का संस्करण जिसने आपकी कक्षा फ़ाइल (यानी इसे संकलित) बनाया है, वह नया है।

इसे ठीक करने के लिए, आप या तो कर सकते हैं

क) अपने जावा स्रोतों को उसी या पुराने संस्करण के साथ संकलित करें, जिसे चलाने के लिए जावा संकलक के संस्करण का उपयोग किया जाएगा। यानी उपयुक्त JDK स्थापित करें।

ख) जावा संकलक के नए संस्करण के साथ लेकिन संगतता मोड में अपने जावा स्रोतों को संकलित करें। यानी -targetपैरामीटर का उपयोग करें ।

c) अपनी संकलित कक्षाओं को एक JRE में चलाएं जो समान, या नया, संस्करण है जैसा कि JDK कक्षाओं को संकलित करने के लिए उपयोग किया जाता है।

आप javac -versionसंकलक और java -versionरनटाइम के लिए वर्तमान में उपयोग किए जा रहे संस्करणों की जांच कर सकते हैं ।

क्या मुझे JDK स्थापित करना चाहिए, और अपने PATH चर को JREK के बजाय JDK पर सेट करना चाहिए?

संकलन के लिए, निश्चित रूप से, उस विशिष्ट JDK को स्थापित और कॉन्फ़िगर करें जो आप चाहते हैं।

रनटाइम के लिए, आप जेडडीके या स्टैंडअलोन जेआरई के साथ आने वाले का उपयोग कर सकते हैं, लेकिन इसकी परवाह किए बिना, सुनिश्चित करें कि आपने सही संस्करण स्थापित किए हैं और आपने अपने पैट को ऐसे कॉन्फ़िगर किया है कि कोई आश्चर्य नहीं है।

JRE या JDK में PATH चर के बीच अंतर क्या है?

PATH पर्यावरण वैरिएबल कमांड शेल को बताता है कि आप किस कमांड को देखना चाहते हैं। जब आप टाइप करते हैं java, तो कमांड शेल दुभाषिया चलने के लिए PATHउपयुक्त javaरनटाइम निष्पादन योग्य खोजने के लिए, चर में निर्दिष्ट सभी स्थानों से बाएं से दाएं को देखेगा । यदि आपके पास जावा के कई संस्करण स्थापित हैं - यानी आपके पास javaPATH चर में निर्दिष्ट कई स्थानों में निष्पादन योग्य है, तो बाएं से दाएं जाने पर पहला सामना करना होगा वह निष्पादित होता है।

कंपाइलर कमांड है javacऔर केवल JDK के साथ आता है। रनटाइम कमांड javaJDK के साथ है और JRE में है।

यह संभावना है कि आपके पास स्थापित का एक संस्करण (51.0 = जावा 7) है javac, और आपके पास javaस्थापित का एक ही संस्करण भी है , लेकिन इसका एक और पिछला संस्करण javaPATH में पहले दिखाई दे रहा है और इसलिए आपके द्वारा अपेक्षित के बजाय इसे लागू किया जा रहा है ।


7

आपने JDK / JRE के निचले संस्करण को चलाने के लिए संकलन और प्रयास करने के लिए JDK के एक उच्च संस्करण का उपयोग किया है ।

इसे जांचने के लिए, संस्करण जानकारी देखें:

javac -version

java -version

वे अलग-अलग होंगे और javac में एक उच्च संस्करण संख्या होगी।

इसके चारों ओर जाने के लिए, JDK संस्करण से जावा का उपयोग करें या यदि आपके पास एक नया JRE / JDK है जो साथ ही काम करेगा।

which javacआप, स्थान बता देंगे, उदाहरण के लिए /usr/bin/javac। बस सीधे उपयोग कर चलाएं /usr/bin/java <program>

या आप एक स्थायी समाधान के रूप में पर्यावरण चर सेट कर सकते हैं।


6

यह समस्या तब थी जब मैं जावा 6 में वापस आया और जावा 7 के साथ पहले संकलित कक्षाएं चलाने की कोशिश की। मेरे लिए क्या काम किया गया था वरीयताएँ> जावा> संकलक -> अनुपालन स्तर 1.6 तक सेट करें और महत्वपूर्ण रूप से "प्रोजेक्ट सेटिंग्स कॉन्फ़िगर करें" ।।


6

आज, यह त्रुटि संदेश हमारे Tomcat 7 में Ubuntu 12.04.2 LTS (सटीक पैंगोलिन) पर दिखाई दिया :

/var/log/tomcat7/localhost.2014-04-08.log:
Apr 8, 2014 9:00:55 पूर्वाह्न org.apache.catalina.core.StandardContext फ़िल्टरस्टोर दृश्य
: अपवाद प्रारंभ फ़िल्टर फ़िल्टर 2
java.lang.UnsupportedClassVersionError: नियंत्रक / ReqAccept: असमर्थित प्रमुख। लघु संस्करण 51.0 (वर्ग नियंत्रक लोड करने में असमर्थ। ReAAccept)

Struts आवेदन जावा 7 के साथ संकलित किया गया है।

यह पता चला, कोई व्यक्ति टॉमक्रैट 7 को पुनः आरंभ करने के लिए "सर्विस टोमैट [स्टॉप / स्टार्ट]" का उपयोग करता है

$ ps -ef | grep जावा
टोमैट 7 31783 1 32 20:13? 00:00:03 / usr / lib / jvm / default-java / bin / java ...
$ / usr / lib / jvm / default-java / bin / java
-version java संस्करण "1.6.0_27"

जो "असमर्थित मेजर। मिनर वर्जन 51.0" त्रुटि का कारण बनता है।

जब हमने Tomcat 7 को पुनः आरंभ करने के लिए "/etc/init.d/tomcat7 [stop / start]" का उपयोग किया, तो समस्या हल हो गई।

$ ps -ef | grep जावा
tomcat7 31886 1 80 20:24? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$
/usr/local/java/jdk1.7.0.0_15/bin/java-version java संस्करण "1.7.0_15"


6

मैंने इसे हल किया। मैं भागा:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

त्रुटि, भ्रामक है Unsupported major.minor version 51.0। यह धारणा देता है कि संस्करण 51 (जावा 7) समर्थित नहीं है। और हमें Java 6 का उपयोग करना चाहिए।

त्रुटि होनी चाहिए:

वर्तमान जावा संस्करण, 50, असमर्थित है। इसके बजाय Java संस्करण 7 (51: 0 और अधिक) का उपयोग करें


6

आपकी जावा फ़ाइल उस संस्करण (निचले रनटाइम संस्करण) की तुलना में एक अलग संस्करण (उच्च संकलक संस्करण) के साथ संकलित की जाती है जिसे आप इसके साथ चलाने की कोशिश कर रहे हैं।

यह बुनियादी समझ है कि निचले संस्करणों के साथ संकलित कक्षाएं बाद के उच्च संस्करणों में चलने की उम्मीद है। लेकिन विपरीत (उच्च संकलक संस्करण के साथ संकलित और इसे कम रनटाइम संस्करण के साथ चलाने की कोशिश करना) कभी-कभी संभव नहीं होता है।

इसलिए आपको यह त्रुटि दिखाई जाती है, जब आप अपने प्रोग्राम को निष्पादित करने का प्रयास करते हैं। असमर्थित मेजर प्रमुख। Xor संस्करण

प्रश्न: मैंने जावा 7 में एक एप्लिकेशन बनाया है, लेकिन जब मेरे उपयोगकर्ता इसे चलाने की कोशिश करते हैं तो उन्हें एक असमर्थित मेजर.मिनर वर्जन 0.55 त्रुटि मिलती है। इसका क्या मतलब है और मैं इसके बारे में क्या कर सकता हूं?

ए: यदि आप जावा 7 में जेवैक का उपयोग करते हुए एक एप्लिकेशन को संकलित करते हैं, तो परिणामस्वरूप क्लासफाइल्स में 51.0 संस्करण संख्या होगी। 7 से पहले जावा के संस्करण इस नंबर को नहीं पहचानते हैं, इसलिए आपके उपयोगकर्ताओं को आपके एप्लिकेशन को चलाने से पहले जावा 7 में अपग्रेड करना होगा। यदि आप किसी जावा 7 एपीआई का उपयोग नहीं कर रहे हैं, तो आप 1.6-संगत क्लासफाइल बनाने के लिए javac -target 1.6 का उपयोग करके अपने एप्लिकेशन को संकलित करने का प्रयास कर सकते हैं। यदि आपका एप्लिकेशन वेबस्टार्ट का उपयोग करके तैनात किया गया है, तो आप आवश्यक न्यूनतम संस्करण निर्दिष्ट कर सकते हैं। अधिक जानकारी के लिए, जावा वेब प्रारंभ और JNLP पर डॉक्स यहां देखें। एक बार जब हम अपने डेस्कटॉप पर जावा 6 वाले एंड-यूज़र्स के लिए जावा 7 पर ऑटोपेडेट ट्रिगर करते हैं तो यह समस्या दूर हो जाएगी। इसके लिए समयरेखा अभी निर्धारित नहीं है, हम डेवलपर्स को उनके कोड और जेडीके 7 के बीच किसी भी मुद्दे पर काम करने का समय देना चाहते हैं।

(स्रोत: oracle.com )


5

ओह Mac OS XI JAVA_HOME चर सेट करके इस समस्या को हल करने में सक्षम था:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home

4

पहले चलो कुछ मूल बातें सही हो ...

JRE नेटबीन्स / एक्लिप्स में एक घटक है / स्टैंडअलोन जो आपको पुस्तकालयों, जेवीएम, जावा प्लगइन्स और जावा वेब स्टार्ट के साथ प्रदान करने जा रहा है। ध्यान दें कि यह कंपाइलर या डिबगर प्रदान नहीं करता है।

JDK कंपोजर्स और डीबगर्स के साथ JRE का सुपरसेट है।

इसलिए जब आपके पास JDK के बजाय JRE के रूप में आपकी डिफ़ॉल्ट लाइब्रेरी है, तो आपके पास सामान आयात करने का एक अच्छा समय होने वाला है, लेकिन यह अनिवार्य होगा।

इसके बजाय, JDK के लिए अपना रास्ता तय करें (मैं नेटबीन्स का उपयोग करता हूं, और मैंने उन्हें netbeans.conf में netbeans / etc / netbeans.conf का उपयोग करके सेट किया और रास्ता बदल दिया)।


3

मुझे समस्या यह थी कि मुझे अपनी इकाई परीक्षणों को चलाने के लिए कमांड लाइन से अपने प्रोजेक्ट पर एक मेवेन संकलन चलाने की आवश्यकता थी; अगर मैंने टेस्ट क्लास में बदलाव किया और एक्लिप्स को स्वचालित रूप से फिर से शुरू करने दिया, तो मुझे "असमर्थित मेजर। मिनर वर्जन 51.0" त्रुटि मिली।

मेरे पास JDK6 और JDK7 दोनों हैं, लेकिन मेरी सभी JRE सेटिंग्स, Pom में और प्रोजेक्ट गुण पृष्ठ से ग्रहण में, दोनों पर 1.6 की ओर इशारा कर रही थीं। मावेन अपडेट प्रोजेक्ट और / या रिफ्रेशिंग की किसी भी राशि ने इसे हल नहीं किया।

अंत में मैंने परियोजना को बंद करने और इसे फिर से खोलने की कोशिश की, और यह इसे ठीक करने के लिए लग रहा था! HTH


3

आपने JDK 7 के साथ अपने जावा वर्ग को संकलित किया है और आप JDK 6 पर उसी कक्षा को चलाने का प्रयास कर रहे हैं।


3
  • JDK 7.0.55 स्थापित करें और JDK 7.0.55 के लिए ग्रहण के लिए जावा सेट करें ।
  • JDK 7.0.55 बिल्ड पथ पर कॉन्फ़िगर करके JDK 7.0.55 के साथ प्रोजेक्ट बनाएँ।
  • मेन्यू में JDK 7.0.55 के लिए ग्रहण में कंपाइलर सेट करें विंडोज -> प्राथमिकताएं -> जावा -> कंपाइलर - 1.7 चुनें।

3

समस्या के लिए उत्तर है:

थ्रेड में मुख्य "java.lang.UnsupportedClassVersionError: edu / stevens / cs549 / dhts / main / LocalContext: असमर्थित मेजर। मिनर 52.0.0

मुझे भी यही समस्या आ रही थी। उन लोगों के लिए जो एडब्ल्यूएस एक् 2 उदाहरणों में यह परेशानी कर रहे थे, और किसी तरह इस प्रश्न के लिए यहां पुनर्निर्देशित हो गए हैं। मैं उन लोगों के लिए जवाब दे रहा हूं, और यह साझा करना चाहूंगा कि मैंने यह कैसे किया। मुझे परेशानी हो रही थी क्योंकि अमेज़ॅन ईसी 2 इंस्टेंसेस जावा संस्करण 1.7 चला रहे थे और शायद मेरी परियोजना इसके अनुरूप नहीं थी क्योंकि मैं मावेन का उपयोग कर रहा था और यह जावा 1.8 के लिए पूर्वनिर्मित था। इसलिए मैंने जावा का नया संस्करण स्थापित किया:

sudo yum -y install java-1.8.0

और फिर पुराने संस्करण को हटाने के लिए महत्वपूर्ण कदम है:

sudo yum remove java-1.7.0-openjdk

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.