تحميل - oracle java se download




كيفية إصلاح java.lang.UnsupportedClassVersionError: إصدار major.minor غير مدعوم (20)

أحاول استخدام برنامج Notepad++ كأداة تحرير الكل في واحد ، وتشغيله ، وترجمته ، وما إلى ذلك.

لدي JRE مثبتًا ، ولدي إعداد متغير المسار الخاص بي إلى ... / bin directory.

عندما أقوم بتشغيل "Hello World" في Notepad ++ ، أحصل على هذه الرسالة:

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)
       .........................................

أعتقد أن المشكلة هنا تتعلق بالإصدارات ؛ قد تكون بعض إصدارات Java قديمة أو جديدة جدًا.

  1. كيف أصلحه؟
  2. هل يجب علي تثبيت JDK ، وإعداد متغير المسار الخاص بي إلى JDK بدلاً من JRE؟
  3. ما هو الفرق بين متغير PATH في JRE أو JDK؟

كيف أصلحه؟

هذا الخطأ يعني أن JRE الذي يتم استخدامه لتنفيذ كود صفك لا يتعرف على نسخة Java المستخدمة. عادة لأن إصدار Java الذي أنشأ ملف الفصل الخاص بك (أي أنه تم تجميعه) هو أحدث.

لإصلاحها ، يمكنك إما

أ) قم بتجميع مصادر Java الخاصة بك باستخدام نفس الإصدار أو أقدم من برنامج Java compiler حيث سيتم استخدامه لتشغيله. أي تثبيت JDK المناسب.

ب) قم بتجميع مصادر Java الخاصة بك مع الإصدار الأحدث من برنامج Java compiler ولكن في وضع التوافق. أي استخدام المعلمة -target .

c) قم بتشغيل الفئات المترجمة الخاصة بك في JRE وهو نفس الإصدار أو الأحدث ، حيث يستخدم JDK لترجمة الفئات.

يمكنك التحقق من الإصدارات التي تستخدمها حاليًا مع javac -version ، و java -version لوقت التشغيل.

هل يجب علي تثبيت JDK ، وإعداد متغيّر PATH الخاص بي إلى JDK بدلاً من JRE؟

لتجميع ، بالتأكيد ، تثبيت وتكوين JDK محددة التي تريدها.

بالنسبة إلى وقت التشغيل ، يمكنك استخدام الإصدار الذي يأتي مع JDK أو JREK مستقل ، ولكن بغض النظر عن ذلك ، تأكد من أنك قمت بتثبيت الإصدارات الصحيحة وأنك قمت بتكوين PATH بحيث لا توجد مفاجآت.

ما هو الفرق بين متغير PATH في JRE أو JDK؟

يخبر متغير بيئة PATH shell command حيث تبحث عن الأمر الذي تكتبه. عند كتابة java ، سيبحث مترف shell command خلال كافة المواقع المحددة في متغير PATH ، من اليسار إلى اليمين ، للبحث عن تشغيل java القابل للتنفيذ المناسب لتشغيله. إذا كان لديك إصدارات متعددة من Java مثبّتة - أي أن لديك java القابل للتنفيذ في مواقع متعددة محددة في المتغير PATH ، فسيكون أول نسخة عند الانتقال من اليسار إلى اليمين هو المنفذ الذي يتم تنفيذه.

أمر المترجم javac ويأتي فقط مع JDK. الأمر وقت التشغيل هو java ويأتي مع JDK وهو في JRE.

من المحتمل أن يكون لديك إصدار واحد (51.0 = Java 7) من javac مثبتًا ، ولديك أيضًا نفس الإصدار من java المثبت ، ولكن هذا الإصدار السابق من java يظهر سابقًا في PATH ويتم استدعاؤه بدلاً من واحد تتوقع.


أنا حلها. ركضت:

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

الخطأ مضلل ، Unsupported major.minor version 51.0 . هذا يعطي الانطباع بأن الإصدار 51 (Java 7) غير مدعوم. ويجب أن نستخدم جافا 6.

كان يجب أن يكون الخطأ:

إصدار جافا الحالي ، 50 ، غير معتمد. استخدم Java الإصدار 7 (51: 0 وأكبر) بدلاً من ذلك


إذا كنت تواجه هذه المشكلة أثناء استخدام Maven ، يمكنك تجميع ترجمة التعليمات البرمجية باستخدام برنامج Maven Compiler المساعد.

 <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.


اليوم ، ظهرت رسالة الخطأ هذه في Tomcat 7 على Ubuntu 12.04.2 LTS (دقيقة Pangolin ):

/var/log/tomcat7/localhost.2014-04-08.log:
8 أبريل 2014 9:00:55 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: استثناء بدء فلتر struts2
java.lang.UnsupportedClassVersionError: controller / ReqAccept: unsupported major.minor الإصدار 51.0 (غير قادر على تحميل وحدة تحكم فئة. REQAccept)

يتم تصنيف التطبيق Struts مع Java 7.

اتضح أن هناك شخصًا يستخدم خدمة tomcat [stop / start] لإعادة تشغيل Tomcat 7 ،

$ ps -ef | grep java
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"

الذي يتسبب في الخطأ "Unsupported major.minor إصدار 51.0".

عندما استخدمنا "/etc/init.d/tomcat7 [stop / start]" لإعادة تشغيل Tomcat 7 ، تم حل المشكلة.

$ ps -ef | grep java
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"


تتمثل المشكلة الأكثر شيوعًا في التهيئة الخاطئة لمتغير JAVA_HOME الخاص بك والذي يجب أن يشير إلى مكتبة Java Development Kit المناسبة ، إذا كنت قد قمت بتثبيت العديد منها.

للعثور على موقع مجلد SDK Java ، قم بتشغيل الأوامر التالية:

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

ديبيان / أوبونتو

للتحقق من java (openjdk) الذي قمت بتثبيته ، تحقق من خلال:

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 Runtime Environment فقط. إذا كنت ترغب في تطوير برامج Java java-1.7.0-openjdk-devel حزمة java-1.7.0-openjdk-devel .

BSD

هناك حزمة OpenJDK 7 في مجموعة منافذ FreeBSD تسمى openjdk7 والتي قد تحتاج إلى إعادة تشكيلها.

انظر: صفحة ويكي OpenKDK .

شبابيك

ما عليك سوى تثبيت مكتبة Java SE Development Kit المناسبة من موقع Oracle أو تثبيتها

جنكينز

إذا كنت تواجه هذه المشكلة مع Jenkins ، فراجع:

ومع ذلك ، فإن اختيار الإصدار الصحيح من Java (الأحدث) مع update-alternatives يجب أن يعمل.


حصلت على نفس المشكلة مع مشروع مكتوب في 1.7 وحاولت تنفيذه في 1.6.

الحل الخاص بي في Eclipse:

  • انقر بزر الماوس الأيمن على خصائص المشروع -> Java Build Path -> Libraries

  • حدد مكتبة نظام JRE وانقر فوق تحرير على اليمين ، واختر JRE الهدف.

  • الآن انتقل إلى Java Compiler على اليسار ، وقم بتغيير مستوى توافق المترجم إلى هدفك.

هذا العمل بالنسبة لي.


عندما قمت بتثبيت JDK 1.7 ، تم حل المشكلة.


في Eclipse ، ذهبت للتو إلى نافذة أوامر القائمة -> التفضيلات -> Java -> مترجم ثم حدد "مستوى الامتثال للملقم" إلى 1.6.


كان عند هذه المشكلة عندما عدت إلى Java 6 وحاولت تشغيل فصول سبق تجميعها مع Java 7. ما نجح بالنسبة لي كان Preferences> java> compiler -> set compliance level to 1.6 and vitally "configure project settings" ..


كان لدي نفس رسالة الخطأ عند تشغيل Ant من Eclipse ، ولكن الحلول الأخرى المذكورة هنا لم تحل مشكلتي. الشيء المضحك هو أن تشغيل Ant من سطر أوامر Windows كان يعمل بشكل جيد ، لذلك كان يجب أن يكون مشكلة في التكوين داخل Eclipse.

اتضح أنه تحت Eclipse يمكنك تحديد البيئة التي يجب تشغيل Ant بها وتم تعيينها على أنها JRE بدلاً من JDK.

  • انتقل إلى: Run -> External Tools -> External Tools Configurations ...
  • حدد Ant build.xml للمشروع الخاص بك (إذا كان لديك عدة مشاريع)
  • تنشيط علامة التبويب "JRE"
  • هنا تم اختيار "منفصل JRE: jre6". عندما غيرت هذا إلى JDK من سلسلة 1.6 أو 1.7 ، ذهب الخطأ.

كما تمت الإجابة على ذلك في أماكن أخرى من قبل العديد من الأشخاص ، يتم تشغيل برنامج Java على إصدار قديم من Java أكثر من البرنامج الذي تم تجميعه له. يجب أن يكون "crosscompiled" من أجل التوافق مع الإصدارات السابقة. لوضعها بطريقة أخرى ، هناك عدم تطابق بين إصدارات Java المصدر والهدف.

لا تلبي خيارات التغيير في قوائم Eclipse الملصق الأصلي الذي قال إنه لا يستخدم Eclipse. على OpenJDK javac الإصدار 1.7 ، يمكنك crosscompile لـ 1.6 إذا استخدمت المعلمات -source و -target ، بالإضافة إلى توفير rt.jar -file من الإصدار الهدف (أي ، الأقدم) في وقت التحويل البرمجي. إذا قمت بالفعل بتثبيت 1.6 JRE ، يمكنك الإشارة إلى التثبيت الخاص به (على سبيل المثال ، /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar على Ubuntu ، / usr / jdk / jdk1. 6.0_60 / jre / lib / rt.jar على SunOS على ما يبدو. آسف ، أنا لا أعرف أين هو على نظام ويندوز). مثل ذلك:

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

لا تقلق ، لقد حصلت على حلها.

إنه بسيط بالفعل - تحتاج إلى تثبيت BOTH JRE / JDK بنفس الإصدار.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

وما إلى ذلك وهلم جرا.


لقد تمكن نظام التشغيل Mac OS XI من حل هذه المشكلة عن طريق تعيين متغير JAVA_HOME:

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

لقد قمت بترجمة فئة Java الخاصة بك باستخدام JDK 7 وكنت تحاول تشغيل نفس الفئة على JDK 6.


لقد واجهتني المشكلة حيث كنت أضطر إلى تشغيل تجميع Maven على مشروعي من سطر الأوامر لتشغيل اختبارات الوحدة الخاصة بي. إذا قمت بإجراء تغيير على فئة الاختبار والسماح Eclipse recompile تلقائياً ، ثم حصلت على الخطأ "Unsupported major.minor إصدار 51.0".

لدي كل من JDK6 و JDK7 مثبتين ، لكن كل إعدادات JRE الخاصة بي كانت تشير إلى 1.6 ، سواء في pom أو من صفحة خصائص المشروع في Eclipse. أي مبلغ من مشروع تحديث Maven و / أو منع هذا التحديث.

أخيرا حاولت إغلاق المشروع وإعادة فتحه ، ويبدو أن هذا الإصلاح! HTH


هذا الخطأ يعني أنك تحاول تحميل ملف Java "class" الذي تم تحويله برمجيًا إلى إصدار أحدث من Java مما قمت بتثبيته.

على سبيل المثال ، يمكن تصنيف ملف .class الخاص بك لـ JDK 7 ، وكنت تحاول تشغيله باستخدام JDK 6.

الحل هو إما:

  • ترقية وقت التشغيل جافا أو
  • إعادة ترجمة الفصل إذا كان لديك المصدر ، باستخدام مترجم Java المحلي (إذا كان لديك واحد).

    javac FileName.java

بالنسبة للمطورين ، يمكن أن يحدث ذلك إذا قام مطور آخر بالتدقيق في ملف .class ، ولديهم إصدارًا أحدث من جافا مما لديك!


يتم تصنيف ملف Java الخاص بك مع إصدار مختلف (إصدار مترجم أعلى) من الإصدار (إصدار وقت التشغيل الأقل) الذي تحاول تشغيله به.

من المفهوم الأساسي أن الفئات التي تم تجميعها مع إصدارات أقل من المتوقع أن تعمل في الإصدارات الأحدث. لكن العكس (الذي تم جمعه مع إصدار مترجم أعلى ومحاولة تشغيله مع إصدار تشغيل أقل) غير ممكن في بعض الأحيان.

ومن ثم يظهر لك هذا الخطأ ، عند محاولة تنفيذ البرنامج. إصدار رئيسي غير معتمد. xx

س: لقد قمت بإنشاء تطبيق في Java 7 ، ولكن عندما يحاول المستخدمون تشغيله ، فإنهم يحصلون على خطأ 51.0 uninstalled major.minor. ماذا يعني هذا وماذا أفعل حيال ذلك؟

ج: إذا قمت بتجميع تطبيق باستخدام javac في Java 7 ، فسيحتوي ملف تعريف الصفحات الناتج على رقم إصدار 51.0. لا تتعرف إصدارات Java السابقة لـ 7 على هذا الرقم ، لذا سيتعين على المستخدمين لديك الترقية إلى Java 7 قبل تشغيل التطبيق. إذا كنت لا تستخدم أي من واجهات برمجة تطبيقات Java 7 ، فيمكنك محاولة تجميع التطبيق الخاص بك باستخدام javac -target 1.6 لإنشاء ملف تصنيف متوافق مع 1.6. إذا تم نشر التطبيق الخاص بك باستخدام webstart ، يمكنك تحديد الحد الأدنى للإصدار المطلوب. لمزيد من المعلومات ، راجع المستندات على Java Web Start و JNLP هنا. ستختفي هذه المشكلة بمجرد أن نطلق autoupdate إلى Java 7 للمستخدمين النهائيين الذين لديهم حاليًا Java 6 على أسطح مكاتبهم. لم يتم تحديد المخطط الزمني لهذا حتى الآن ، ونريد إعطاء مطورين وقتًا لحل أي مشكلات بين الشفرة و 7 JDK أولاً.

(المصدر: oracle.com .)


يحدث java.lang.UnsupportedClassVersionError بسبب ارتفاع JDK أثناء وقت التحويل البرمجي و JDK أقل أثناء وقت التشغيل.


يمكنك الحصول على بعض مكتبات JAR المجمعة في Java 7 ، ولديك فقط Java 6 مثل Java Runtime. يمكن أن يحدث مع بعض المكتبات الجديدة.


  • قم بتثبيت الإصدار 7.0.55 من JDK وقم بتعيين Java for Eclipse لـ JDK 7.0.55.
  • إنشاء المشروع مع JDK 7.0.55 عن طريق تكوين على مسار الإنشاء 7.055 JDK.
  • قم بتعيين المحول البرمجي في Eclipse لـ JDK 7.0.55 حسب القائمة Windows -> التفضيلات -> Java -> Compiler - اختر 1.7.




unsupported-class-version