Java.lang.UnsupportedClassVersion त्रुटि को कैसे ठीक करें: असमर्थित major.minor संस्करण
jvm incompatibility (20)
मैं इसे कैसे ठीक करूं?
इस त्रुटि का अर्थ है कि जेआरई जिसका उपयोग आपके क्लास कोड को निष्पादित करने के लिए किया जा रहा है, जावा का संस्करण इस्तेमाल नहीं करता है। आम तौर पर क्योंकि जावा का संस्करण जिसने आपकी कक्षा फ़ाइल जेनरेट की है (यानी इसे संकलित किया गया है) नया है।
इसे ठीक करने के लिए, आप या तो कर सकते हैं
ए) अपने जावा स्रोतों को जावा कंपाइलर के समान, या पुराने, संस्करण के साथ संकलित करें, इसे चलाने के लिए उपयोग किया जाएगा। यानी उपयुक्त जेडीके स्थापित करें।
बी) जावा कंपाइलर के नए संस्करण के साथ अपने संगतता मोड में अपने जावा स्रोतों को संकलित करें। यानी -target
पैरामीटर का उपयोग करें।
सी) एक जेआरई में अपनी संकलित कक्षाएं चलाएं जो कक्षाओं को संकलित करने के लिए उपयोग किए जाने वाले जेडीके के समान, या नया, संस्करण है।
आप उन संस्करणों की जांच कर सकते हैं जिन्हें आप वर्तमान में कंपाइलर के लिए javac -version
java -version
साथ उपयोग कर रहे हैं, और रनटाइम के लिए java -version
।
क्या मुझे जेडीके इंस्टॉल करना चाहिए, और जेआरई के बजाय जेडीके में अपना पाथ वैरिएबल सेट करना चाहिए?
संकलन के लिए, निश्चित रूप से, इच्छित जेडीके को स्थापित और कॉन्फ़िगर करें जो आप चाहते हैं।
रनटाइम के लिए, आप जेडीके या स्टैंडअलोन जेआरई के साथ आने वाले व्यक्ति का उपयोग कर सकते हैं, लेकिन इस पर ध्यान दिए बिना, आपने यह सुनिश्चित किया है कि आपने सही संस्करण स्थापित किए हैं और आपने अपने पैथ को कॉन्फ़िगर किया है जैसे कि कोई आश्चर्य नहीं है।
जेआरई या जेडीके में पैथ चर के बीच क्या अंतर है?
पाथ पर्यावरण परिवर्तक कमांड खोल को बताता है जहां आप टाइप कमांड को देखना चाहते हैं। जब आप java
टाइप करते हैं, तो कमांड शेल दुभाषिया चलाने के लिए उचित java
रनटाइम निष्पादन योग्य खोजने के लिए, बाएं से दाएं, PATH
चर में निर्दिष्ट सभी स्थानों को देखेगा। यदि आपके पास जावा के कई संस्करण स्थापित हैं - यानी आपके पास पाथ वैरिएबल में निर्दिष्ट कई स्थानों में java
निष्पादन योग्य है, तो बाएं से दाएं जाने पर पहली बार सामना किया जाने वाला पहला व्यक्ति निष्पादित किया जाएगा।
कंपाइलर कमांड javac
और केवल javac
साथ आता है। रनटाइम कमांड java
और जेडीके के साथ आता है और जेआरई में है।
यह संभावना है कि आपके पास जावा संस्करण का एक संस्करण (51.0 = जावा 7) स्थापित है, और आपके पास java
का एक ही संस्करण स्थापित है, लेकिन java
का एक और पिछला संस्करण पहले पाथ में दिखाई दे रहा है और इसलिए इसे बजाया जा रहा है एक आप उम्मीद करते हैं।
मैं Notepad++ का उपयोग करने की कोशिश कर रहा हूं क्योंकि मेरे ऑल-इन-वन टूल एडिट, रन, कंपाइल इत्यादि।
मेरे पास 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)
.........................................
मुझे लगता है कि यहां समस्या संस्करणों के बारे में है; जावा का कुछ संस्करण पुराना या बहुत नया हो सकता है।
- मैं इसे कैसे ठीक करूं?
- क्या मुझे जेडीके इंस्टॉल करना चाहिए, और जेआरई के बजाय जेडीके में अपना पथ वैरिएबल सेट करना चाहिए?
- जेआरई या जेडीके में
PATH
चर के बीच क्या अंतर है?
आज, यह त्रुटि संदेश हमारे टॉमकैट 7 में उबंटू 12.04.2 एलटीएस (सटीक पांगोलिन ) पर दिखाई दिया:
/var/log/tomcat7/localhost.2014-04-08.log:
8 अप्रैल, 2014 9:00:55 पूर्वाह्न org.apache.catalina.core.StandardContext फ़िल्टर स्टार्ट
सेवर: अपवाद फ़िल्टर स्ट्रैट्स 2 शुरू करना
java.lang.UnsupportedClassVersionError: नियंत्रक / ReqAccept: असमर्थित major.minor संस्करण 51.0 (कक्षा नियंत्रक लोड करने में असमर्थ। ReqAccept)
Struts एप्लिकेशन जावा 7 के साथ संकलित है।
यह निकला, कोई टॉमकैट 7 को पुनरारंभ करने के लिए "सेवा टोमकैट [स्टॉप / स्टार्ट]" का उपयोग करता है,
$ ps -ef | grep जावा
tomcat7 31783 1 32 20:13? 00:00:03 / usr / lib / jvm / default-java / bin / java ...
$ / usr / lib / jvm / default-java / bin / java -version
जावा संस्करण "1.6.0_27"
जो "असमर्थित major.minor संस्करण 51.0" त्रुटि का कारण बनता है।
जब हमने टॉमकैट 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_15/bin/java -version
जावा संस्करण "1.7.0_15"
आपकी जावा फ़ाइल को संस्करण (निचला रनटाइम संस्करण) से अलग संस्करण (उच्च संकलक संस्करण) के साथ संकलित किया गया है जिसे आप इसे चलाने का प्रयास कर रहे हैं।
यह मूलभूत समझ है कि निम्न संस्करणों के साथ संकलित कक्षाओं को बाद के उच्च संस्करणों में चलाने की उम्मीद है। लेकिन इसके विपरीत (उच्च संकलक संस्करण के साथ संकलित और इसे कम रनटाइम संस्करण के साथ चलाने की कोशिश कर रहा है) कभी-कभी संभव नहीं है।
इसलिए आपको अपने प्रोग्राम को निष्पादित करने का प्रयास करते समय यह त्रुटि दिखाई जाती है। असमर्थित major.minor संस्करण xx
प्रश्न: मैंने जावा 7 में एक एप्लीकेशन बनाया है, लेकिन जब मेरे उपयोगकर्ता इसे चलाने का प्रयास करते हैं तो उन्हें एक असमर्थित major.minor संस्करण 51.0 त्रुटि मिलती है। इसका क्या अर्थ है और मैं इसके बारे में क्या कर सकता हूं?
ए: यदि आप Java 7 में javac का उपयोग करके किसी एप्लिकेशन को संकलित करते हैं, तो परिणामस्वरूप क्लासफ़ाइल में 51.0 संस्करण संख्या होगी। 7 से पहले जावा के संस्करण इस नंबर को नहीं पहचानते हैं, इसलिए आपके उपयोगकर्ताओं को आपके एप्लिकेशन को चलाने से पहले जावा 7 में अपग्रेड करना होगा। यदि आप किसी भी जावा 7 एपीआई का उपयोग नहीं कर रहे हैं तो आप 1.6-संगत क्लासफाइल बनाने के लिए javac-target 1.6 का उपयोग करके अपने एप्लिकेशन को संकलित करने का प्रयास कर सकते हैं। यदि आपका एप्लिकेशन वेबस्टार्ट का उपयोग करके तैनात किया गया है तो आप आवश्यक न्यूनतम संस्करण निर्दिष्ट कर सकते हैं। अधिक जानकारी के लिए, जावा वेब स्टार्ट और जेएनएलपी पर दस्तावेज़ देखें। एक बार जब हम अपने डेस्कटॉप पर जावा 6 वाले अंतिम उपयोगकर्ताओं के लिए जावा 7 पर स्वत: अद्यतन को ट्रिगर करते हैं तो यह समस्या दूर हो जाएगी। इसके लिए समयरेखा अभी तक निर्धारित नहीं है, हम डेवलपर्स को अपने कोड और जेडीके 7 के बीच किसी भी मुद्दे को हल करने के लिए समय देना चाहते हैं।
(स्रोत: oracle.com ।)
आपके पास जावा 7 में संकलित कुछ जेएआर लाइब्रेरी हो सकती है, और आपके पास जावा रनटाइम के रूप में केवल जावा 6 है। यह कुछ नए पुस्तकालयों के साथ हो सकता है।
आपने जेडीके / JRE निचले संस्करण से भागने और चलाने की कोशिश करने के लिए जेडीके का उच्च संस्करण उपयोग किया है।
इसे देखने के लिए, संस्करण जानकारी देखें:
javac -version
java -version
वे अलग होंगे और जावैक में उच्च संस्करण संख्या होगी।
इसके आस-पास पहुंचने के लिए, जेडीके संस्करण से जावा का उपयोग करके चलाएं या यदि आपके पास एक नया जेआरई / जेडीके है जो भी काम करेगा।
which javac
आपको स्थान बताएगा, उदाहरण के लिए, /usr/bin/javac
। बस /usr/bin/java <program>
का उपयोग करके सीधे चलाएं।
या आप पर्यावरण चर को स्थायी समाधान के रूप में सेट कर सकते हैं।
इस त्रुटि का अर्थ है कि आप जावा "क्लास" फ़ाइल को लोड करने का प्रयास कर रहे हैं जिसे आपके द्वारा स्थापित किए गए जावा के एक नए संस्करण के साथ संकलित किया गया था।
उदाहरण के लिए, आपकी .class
फ़ाइल को जेडीके 7 के लिए संकलित किया जा सकता था, और आप इसे जेडीके 6 के साथ चलाने की कोशिश कर रहे हैं।
तो समाधान या तो है:
- अपने जावा रनटाइम को अपग्रेड करें या
यदि आपके पास स्थानीय जावा कंपाइलर (यदि आपके पास है) का उपयोग कर स्रोत है, तो क्लास को दोबारा दोबारा बनाएं।
javac FileName.java
डेवलपर्स के लिए, यह तब हो सकता है जब कोई अन्य डेवलपर किसी .class फ़ाइल में चेक करता है, और आपके पास जावा की एक नई संस्करण है जो आपके पास है!
एक्लिप्स से चींटी चलाते समय मुझे एक ही त्रुटि संदेश था, लेकिन यहां उल्लेखित अन्य समाधानों ने मेरी समस्या का समाधान नहीं किया। मजाकिया बात यह थी कि विंडोज कमांड लाइन से चींटी चलाना ठीक चल रहा था, इसलिए इसे ग्रहण के भीतर कॉन्फ़िगरेशन समस्या होनी चाहिए।
यह पता चला कि ग्रहण के तहत आप पर्यावरण को निर्दिष्ट कर सकते हैं कि चींटी के साथ चलना चाहिए और इसे जेडीके के बजाय जेआरई के रूप में सेट किया गया था।
- यहां जाएं: चलाएं -> बाहरी उपकरण -> बाहरी उपकरण विन्यास ...
- अपनी परियोजना के लिए Ant build.xml का चयन करें (यदि आपके पास एकाधिक प्रोजेक्ट हैं)
- टैब 'जेआरई' सक्रिय करें
- यहां 'अलग जेआरई: जेआर 6' चुना गया था। जब मैंने इसे 1.6 या 1.7 श्रृंखला से जेडीके में बदल दिया, तो त्रुटि समाप्त हो गई।
ओह मैक ओएस एक्सआई JAVA_HOME चर सेट करके इस समस्या को हल करने में सक्षम था:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
ग्रहण मेनू में विंडो -> प्राथमिकताएं -> जावा -> कंपाइलर जांच भी "परियोजना विशिष्ट सेटिंग्स कॉन्फ़िगर करें"।
यदि आपके पास एक ही जावा संस्करण के साथ त्रुटि है: मैन्युअल रूप से अपने प्रोजेक्ट के बिल्ड फ़ोल्डर को हटाने का प्रयास करें। फिर ग्रहण को पुनरारंभ करें।
चिंता मत करो, मुझे हल हो गया।
यह वास्तव में सरल है - आपको एक ही संस्करण के साथ दोनों जेआरई / जेडीके स्थापित करने की आवश्यकता है।
जेआरई 6 -> जेडीके 6
जेआरई 7 -> जेडीके 7
और इसी तरह।
जब मैं जावा 6 पर वापस लौटा तो यह समस्या थी और जावा 7 के साथ पहले संकलित कक्षाओं को चलाने की कोशिश की। मेरे लिए क्या काम किया गया था प्राथमिकता> जावा> कंपाइलर -> अनुपालन स्तर 1.6 पर सेट करें और महत्वपूर्ण रूप से "परियोजना सेटिंग्स कॉन्फ़िगर करें" ..
जब मैंने JDK 1.7 स्थापित किया, तो समस्या हल हो गई।
दिखाया गया संस्करण संख्या जेआरई के संस्करण का वर्णन करती है, कक्षा फ़ाइल के साथ संगत है।
रिपोर्ट की गई प्रमुख संख्याएं हैं:
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
(स्रोत: Wikipedia )
वास्तविक समस्या को ठीक करने के लिए आपको या तो Java JRE के नए संस्करण के साथ जावा कोड चलाने या जावा कंपाइलर को लक्षित पैरामीटर निर्दिष्ट करने के लिए संकलक को पुराने जावा संस्करणों के साथ संगत कोड बनाने के निर्देश देने के लिए प्रयास करना चाहिए।
उदाहरण के लिए, जावा 1.4 के साथ संगत कक्षा फ़ाइलों को उत्पन्न करने के लिए, निम्न कमांड लाइन का उपयोग करें:
javac -target 1.4 HelloWorld.java
जावा कंपाइलर के नए संस्करणों के साथ आपको बूटस्ट्रैप क्लास पथ सेट नहीं होने के बारे में चेतावनी मिल सकती है। इस त्रुटि के बारे में अधिक जानकारी ब्लॉग पोस्ट में उपलब्ध है, बिना बूटक्लासपैथ के पुराने स्रोत को सेट करने के लिए नई जावैक चेतावनी ।
मुझे 1.7 में लिखे गए प्रोजेक्ट के साथ एक ही समस्या मिली और 1.6 में निष्पादित करने की कोशिश की।
ग्रहण में मेरा समाधान:
अपने प्रोजेक्ट प्रॉपर्टीज पर राइट क्लिक करें -> जावा बिल्ड पथ -> लाइब्रेरीज़
अपनी जेआरई सिस्टम लाइब्रेरी का चयन करें और दाईं ओर संपादित करें पर क्लिक करें , और लक्ष्य जेआरई चुनें।
अब बाईं ओर जावा कंपाइलर पर जाएं, और कंपाइलर अनुपालन स्तर को अपने लक्ष्य में बदलें।
यह मेरे लिए काम किया।
मैंने इसे हल किया। मैं भाग गया:
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
त्रुटि भ्रामक है, Unsupported major.minor version 51.0
। यह इंप्रेशन देता है कि संस्करण 51 (जावा 7) समर्थित नहीं है। और हमें जावा 6 का उपयोग करना चाहिए।
त्रुटि होनी चाहिए:
वर्तमान जावा संस्करण, 50, असमर्थित है। इसके बजाय जावा संस्करण 7 (51: 0 और अधिक) का उपयोग करें
मैक पर मेरी एक ही स्थिति थी, और निम्नलिखित प्रक्रिया मेरे लिए काम करती थी:
टर्मिनल में टाइप करें
vi ~/.profile
फिर फ़ाइल में इस लाइन को जोड़ें, और सहेजें
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home
जहां संस्करण आपके कंप्यूटर पर है, जैसे कि 1.7.0_25
।
संपादक से बाहर निकलें, फिर निम्न आदेश टाइप करें इसे प्रभावी बनें
source ~/.profile
फिर परिणाम की जांच करने के लिए जावा-वर्जन टाइप करें
java -version
.profile
फ़ाइल क्या है?
.profile फ़ाइल एक छिपी हुई फाइल है। यह एक वैकल्पिक फ़ाइल है जो सिस्टम को बताती है जो उस उपयोगकर्ता को चलाने के लिए आदेश देता है जब उपयोगकर्ता जिस प्रोफाइल प्रोफाइल में लॉग इन करता है। उदाहरण के लिए, यदि मेरा उपयोगकर्ता नाम ब्रूनो है और /profile फ़ाइल / उपयोगकर्ता / ब्रूनो / में इसकी सभी सामग्री है, तो इसकी सभी सामग्री लॉग-इन प्रक्रिया के दौरान निष्पादित किया जाएगा।
सबसे आम समस्या आपके JAVA_HOME
चर का गलत कॉन्फ़िगरेशन है, जिसे आपने एकाधिक जावा डेवलपमेंट किट लाइब्रेरी को इंगित किया है, यदि आपने एकाधिक इंस्टॉल किए हैं।
एसडीके जावा फ़ोल्डर कहां स्थित है, यह जानने के लिए, निम्न आदेश चलाएं:
jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
Debian / Ubuntu
यह जांचने के लिए कि आपने कौन सा जावा (openjdk) स्थापित किया है, इसके माध्यम से जांचें:
dpkg -l "openjdk*" | grep ^i
या:
update-java-alternatives -l
इसे बदलने के लिए, उपयोग करें:
update-alternatives --config java
यदि आवश्यक हो तो सूडो के साथ उपसर्ग।
वैकल्पिक जावा संस्करण का चयन करने के लिए।
या जांच के लिए जो उपलब्ध हैं जांचें:
apt-cache search ^openjdk
यदि आवश्यक हो तो सूडो के साथ उपसर्ग।
फिर आप स्थापित कर सकते हैं, उदाहरण के लिए:
apt-get install openjdk-7-jre
यदि आवश्यक हो तो सूडो के साथ उपसर्ग।
फेडोरा, ओरेकल लिनक्स, रेड हैट
उचित पैकेज को स्थापित / अपग्रेड करें:
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
java-1.7.0-openjdk
पैकेज में केवल जावा रनटाइम पर्यावरण है। यदि आप जावा प्रोग्राम विकसित करना चाहते हैं तोjava-1.7.0-openjdk-devel
पैकेज स्थापित करें।
बीएसडी
फ्रीबीएसडी पोर्ट्स संग्रह में openjdk7 7 पैकेज है जिसे openjdk7 7 कहा जाता है जिसे शायद पुन: कॉन्फ़िगर किया जाना चाहिए।
देखें: ओपनजेडीके विकी पेज ।
विंडोज
बस ओरेकल साइट से स्थापित जावा एसई डेवलपमेंट किट लाइब्रेरी स्थापित करें या इंस्टॉल करें
जेनकींस
यदि आप जेनकींस के साथ इस समस्या का सामना कर रहे हैं, तो देखें:
हालांकि update-alternatives
साथ जावा (नए) का सही संस्करण चुनना चाहिए।
सबसे पहले कुछ मूलभूत बातें प्राप्त करें ...
जेआरई NetBeans / Eclipse / स्टैंडअलोन में एक घटक है जो आपको पुस्तकालयों, जेवीएम, जावा प्लगइन्स और जावा वेब स्टार्ट प्रदान करने जा रहा है। ध्यान दें कि यह शिकायतकर्ता या डिबगर्स प्रदान नहीं करता है।
जेडीके शिकायतकर्ता और डिबगर्स के साथ जेआरई का सुपरसेट है।
तो जब आपके पास जेडीके की बजाय जेआरई के रूप में आपकी डिफ़ॉल्ट लाइब्रेरी है, तो आपके पास सामान आयात करने में अच्छा समय होगा, लेकिन यह संकलित नहीं होगा।
इसके बजाए, अपना रास्ता जेडीके पर सेट करें (मैं नेटबीन का उपयोग करता हूं, और मैंने netbeans.conf का उपयोग netbeans / etc / netbeans.conf में सेट किया है और पथ को बदल दिया है)।
java.lang.UnsupportedClassVersionError
रनटाइम के दौरान संकलन समय और कम जेडीके के दौरान उच्च जेडीके की वजह से होती है।
- जेडीके 7.0.55 स्थापित करें और जेडीके 7.0.55 के लिए जावा के लिए Eclipse सेट करें।
- बिल्ड पथ जेडीके 7.0.55 पर कॉन्फ़िगर करके जेडीके 7.0.55 के साथ प्रोजेक्ट बनाएं।
- मेनू द्वारा जेडीके 7.0.55 के लिए ग्रहण में कंपाइलर सेट करें -> प्राथमिकताएं -> जावा -> कंपाइलर - 1.7 चुनें।