java.lang.UnsupportedClassVersionError को कैसे ठीक करें: पूरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: आपके Java कोड के लिए "टाइम मशीन"

\n

कल्पना करें: आपने एक शानदार लाइब्रेरी डाउनलोड की, कुछ लाइनें कोड लिखीं, "Run" दबाया — और काम करने वाले प्रोग्राम के बजाय आपको एक लंबा, डरावना मैसेज दिखता है:

\n
Exception in thread "main" java.lang.UnsupportedClassVersionError: \ncom/example/MyApp has been compiled by a more recent version of the Java Runtime \n(class file version 61.0), this version of the Java Runtime only recognizes \nclass file versions up to 55.0
\n

परिचित लग रहा है? अगर आप कभी java.lang.UnsupportedClassVersionError से टकराए हैं, तो आप जानते हैं कि यह दो लोगों के अलग-अलग भाषाओं में बात करने जैसा है। आपका Java प्रोग्राम वर्जन 61.0 (Java 17) बोल रहा है, जबकि रनटाइम एनवायरनमेंट सिर्फ वर्जन 55.0 (Java 11) तक समझता है।

\n

इस ट्यूटोरियल में हम समझेंगे कि Unsupported major.minor version क्या है, यह क्यों होता है, और सबसे ज़रूरी, इसे कैसे ठीक करें। हम सिर्फ रेडीमेड सॉल्यूशन नहीं देंगे, बल्कि आपको समस्या की जड़ समझना सिखाएंगे। चलिए शुरू करते हैं!

\n\n

major.minor version क्या है? एक त्वरित जानकारी

\n

Java में हर .class फ़ाइल पर एक इंटरनल लेबल होता है — major.minor version। यह बाइट-कोड फॉर्मेट का वर्जन नंबर है, जो कंपाइलर javac द्वारा बनाया जाता है। उदाहरण के लिए:

\n
    \n
  • major 52 → Java 8
  • \n
  • major 55 → Java 11
  • \n
  • major 61 → Java 17
  • \n
  • major 65 → Java 21
  • \n
\n

जब आप एप्लिकेशन चलाते हैं, तो JRE (Java Runtime Environment) जाँचता है कि क्या वह इस फ़ाइल को "समझ" सकता है। अगर फ़ाइल का वर्जन JRE के वर्जन से नया है, तो आपको java.lang.UnsupportedClassVersionError मिलता है।

\n

एक सरल उदाहरण: मान लीजिए आप Adobe Acrobat 2023 में बनाए गए PDF डॉक्यूमेंट को Adobe Reader 2010 में खोलने की कोशिश कर रहे हैं। प्रोग्राम कहेगा: "मैं इस फॉर्मेट को नहीं पहचानता।"

\n\n

UnsupportedClassVersionError एरर के मुख्य कारण

\n

Unsupported major.minor version एरर कई कारणों से हो सकता है:

\n
    \n
  • JDK और JRE के अलग-अलग वर्जन: आपने कोड JDK 17 पर कंपाइल किया, लेकिन JRE 11 पर चला रहे हैं।
  • \n
  • थर्ड-पार्टी लाइब्रेरीज़: आपने एक JAR फ़ाइल कनेक्ट की जो Java 17 के लिए कंपाइल की गई है, जबकि आपका रनटाइम Java 8 है।
  • \n
  • Maven/Gradle की गलत सेटिंग: बिल्ड फ़ाइल में एक Java वर्जन लिखा है, लेकिन सर्वर पर दूसरा इंस्टॉल है।
  • \n
  • पुराने सर्वर पर डिप्लॉयमेंट: आप मॉडर्न IDE पर डेवलप कर रहे हैं, लेकिन प्रोडक्शन सर्वर पुराने Java पर चल रहा है।
  • \n
\n\n

स्टेप-बाय-स्टेप ट्यूटोरियल: एरर कैसे ठीक करें

\n

आइए समस्या को हल करने के लिए ठोस कदम समझते हैं। हम तीन मुख्य परिदृश्यों पर ध्यान देंगे।

\n\n

चरण 1: Java वर्जन चेक करें

\n

सबसे पहले यह पता लगाएं कि "दोषी" कौन है। टर्मिनल खोलें और ये कमांड चलाएं:

\n
# जिस वर्जन पर आप कंपाइल कर रहे हैं (JDK)\njavac -version\n\n# जिस वर्जन पर आप चला रहे हैं (JRE)\njava -version
\n

अगर ये मैच नहीं करते — तो यही कारण है। उदाहरण के लिए, javac "17.0.1" दिखाता है, जबकि java "11.0.12" दिखाता है।

\n

समाधान: दोनों वर्जन को एक समान करें। या तो JRE को अपडेट करें, या कंपाइलेशन वर्जन को कम करें (इसके बारे में नीचे बताया गया है)।

\n\n

चरण 2: कंपाइलेशन सेटिंग्स ठीक करें

\n

अगर आप JRE को अपडेट नहीं कर सकते (जैसे, सर्वर पर), तो कोड को पुराने वर्जन के लिए कंपाइल करना होगा। कंपाइलर में -source और -target फ्लैग का उपयोग करें:

\n
// Java 17 का कोड कंपाइल करें, लेकिन Java 11 के लिए बाइट-कोड जनरेट करें\njavac -source 17 -target 11 MyApp.java
\n

महत्वपूर्ण: -source बताता है कि आप किस Java सिंटैक्स का उपयोग कर रहे हैं, और -target बताता है कि .class फ़ाइल किस JRE वर्जन के लिए जनरेट होनी चाहिए। अगर आपका कोड Java 17 की सुविधाओं (जैसे, switch एक्सप्रेशन) का उपयोग करता है, तो वे संगत बाइट-कोड में कंपाइल हो जाएंगे।

ब्लॉग

पुस्तक अनुशंसाएँ