כיצד לתקן java.lang.UnsupportedClassVersionError

1. הקדמה

במדריך קצר זה, נלמד מה גורם לשגיאת זמן הריצה של Java java.lang.UnsupportedClassVersionError: גרסה מז'ורית לא נתמכת. ואיך לתקן את זה.

2. מבט על השגיאה

נתחיל בבדיקת שגיאת דוגמה:

חריג בשרשור "הראשי" java.lang.UnsupportedClassVersionError: com / baeldung / MajorMinorApp הורכב על ידי גרסה עדכנית יותר של Java Runtime (גרסת קובץ מחלקה 55.0), גרסה זו של Java Runtime מזהה רק גרסאות קבצים בכיתה עד 52.0

שגיאה זו מספרת לנו שהמחלקה שלנו הורכבה בגרסה גבוהה יותר של Java מאשר הגרסה איתה ניסינו להריץ אותה. באופן ספציפי יותר, במקרה זה, ערכנו את המחלקה שלנו עם Java 11 וניסינו להריץ אותה עם Java 8.

2.1. מספרי גרסת Java

לצורך התייחסות, בואו נסתכל במהירות על מספרי גרסאות Java. זה יהיה שימושי במקרה שנצטרך להוריד את גרסת Java המתאימה.

מספרי הגרסאות העיקריים והקטנים מאוחסנים בקוד התיקיה בכיתה בתים שש ושבע.

בואו נראה כיצד מספרי הגרסאות העיקריים ממופים לגרסאות Java:

  • 45 = Java 1.1
  • 46 = Java 1.2
  • 47 = Java 1.3
  • 48 = Java 1.4
  • 49 = Java 5
  • 50 = Java 6
  • 51 = Java 7
  • 52 = Java 8
  • 53 = Java 9
  • 54 = Java 10
  • 55 = Java 11
  • 56 = Java 12
  • 57 = Java 13

3. תקן באמצעות שורת הפקודה

בואו נדון כעת כיצד נוכל לפתור שגיאה זו בעת הפעלת Java משורת הפקודה.

תלוי במצבנו, יש לנו שתי דרכים בהן נוכל לפתור שגיאה זו: קומפילציה של הקוד שלנו לגירסה קודמת של Java, או הפעלת הקוד בגירסת Java חדשה יותר.

ההחלטה הסופית תלויה במצבנו. אם עלינו להשתמש בספריית צד שלישי שכבר הורכבה ברמה גבוהה יותר, האפשרות הטובה ביותר שלנו היא ככל הנראה להריץ את היישום שלנו באמצעות גרסת Java חדשה יותר. אם אנו אורזים אפליקציה להפצה, אולי עדיף להרכיב לגרסה ישנה יותר.

3.1. JAVA_HOME משתנה הסביבה

נתחיל בבדיקה כיצד שלנו JAVA_HOME משתנה מוגדר. זה יגיד לנו באיזה JDK משתמשים כאשר אנו רצים ג'אוואק משורת הפקודה שלנו:

הד% JAVA_HOME% C: \ Apps \ Java \ jdk8-x64

אם אנו מוכנים לעבור לחלוטין ל- JDK חדש יותר, אנו יכולים להוריד את הגרסה החדשה יותר ולוודא את זו שלנו נָתִיב ו JAVA_HOME משתני הסביבה נקבעים כראוי.

3.2. הפעלת JRE חדש

אם נחזור לדוגמא שלנו, בואו נסתכל כיצד נוכל לפתור את השגיאה על ידי הפעלת אותה בגרסה גבוהה יותר של Java. בהנחה שיש לנו Java 11 JRE C: \ Apps \ jdk-11.0.2, אנו יכולים להריץ את הקוד שלנו עם ה- ג'אווה פקודה ארוזה איתה:

C: \ Apps \ jdk-11.0.2 \ bin \ java com.baeldung.MajorMinorApp שלום עולם!

3.3. קומפילציה עם JDK ישן יותר

אם אנו כותבים יישום שאנו רוצים להריץ אותו לגרסה מסוימת של Java, עלינו לאסוף את הקוד עבור אותה גרסה.

אנו יכולים לעשות זאת באחת משלוש דרכים: שימוש ב- JDK ישן יותר כדי לקמפל את הקוד שלנו, באמצעות ה- -מסלול שבילים, -מָקוֹר, ו -יַעַד אפשרויות של ג'אוואק פקודה (JDK 8 ומעלה), או באמצעות -לְשַׁחְרֵר אפשרות (JDK 9 ומעלה).

נתחיל בשימוש ב- JDK ישן יותר, בדומה לאופן בו השתמשנו ב- JRE חדש יותר להפעלת הקוד שלנו:

C: \ Apps \ Java \ jdk1.8.0_31 \ bin \ javac com / baeldung / MajorMinorApp.java

אפשר פשוט להשתמש -מָקוֹר ו -יַעַד, אך הוא עדיין עשוי ליצור קבצי מחלקה שאינם תואמים ל- Java ישן יותר.

כדי להבטיח תאימות, אנו יכולים להצביע -מסלול שבילים ב rt.jar של ה- JRE הממוקד:

javac -bootclasspath "C: \ Apps \ Java \ jdk1.8.0_31 \ jre \ lib \ rt.jar" \ - source 1.8-target 1.8 com / baeldung / MajorMinorApp.java

האמור לעיל חל בעיקר על JDK 8 ומטה. ב- JDK 9, ה- -לְשַׁחְרֵר פרמטר נוסף להחלפה -מָקוֹר ו -יַעַד. ה -לְשַׁחְרֵר אפשרות תומכת ביעדים 6, 7, 8, 9, 10, 11.

בואו נשתמש -לְשַׁחְרֵר למקד ל- Java 8:

javac - שחרר 8 com / baeldung / MajorMinorApp.java

כעת אנו יכולים להריץ את הקוד שלנו ב- Java 8 ומעלה.

4. ליקוי חמה

כעת, לאחר שאנו מבינים את השגיאה ואת הגישה הכללית לתיקונה, בואו ניקח את מה שלמדנו ונראה כיצד נוכל ליישם אותה בעבודה ב- Eclipse IDE.

4.1. שינוי JRE

בהנחה שכבר הגדרנו Eclipse עם גרסאות שונות של Java, בואו נשנה את ה- JRE של הפרויקט שלנו.

בוא נלך אל שלנו נכסי פרויקטואז ל נתיב Java Build, ואז ספריות הכרטיסייה. לאחר ההגעה, אנו נבחר ב- JRE ונלחץ לַעֲרוֹך:

עכשיו, בואו נבחר JRE חלופי והצביע על התקנת Java 11 שלנו:

בשלב זה, היישום שלנו יפעל נגד Java 11.

4.2. שינוי רמת המהדר

בואו נסתכל כיצד אנו יכולים לשנות את היעד שלנו לרמה נמוכה יותר של Java.

ראשית, בוא נחזור לשלנו נכסי פרויקט, לאחר מכן מהדר Java, ולבדוק אפשר הגדרות ספציפיות לפרויקט:

כאן, אנו יכולים להגדיר את הפרויקט שלנו להיערך עבור גרסאות קודמות של Java ולהתאים אישית הגדרות תאימות אחרות:

5. IntelliJ IDEA

אנו יכולים לשלוט גם בגירסת Java שאנו משתמשים לה קומפילציה והפעלה ב- IntelliJ IDEA.

5.1. הוספת JDK

לפני שנעשה זאת, נראה כיצד להוסיף JDK נוספים. בוא נלך ל קובץ -> מבנה פרויקט -> הגדרות פלטפורמה -> SDK:

בואו נלחץ על סמל הפלוס בעמודה האמצעית, בחר באפשרות JDK מהתפריט הנפתח ובחר את מיקום JDK שלנו:

5.2. שינוי JRE

ראשית, נבדוק כיצד להשתמש ב- IDEA להפעלת הפרויקט שלנו ב- JRE החדש יותר.

בוא נלך ל הפעל -> ערוך תצורות ... ולשנות את שלנו JRE עד 11:

כעת, כאשר אנו מפעילים את הפרויקט שלנו, הוא יפעל עם Java 11 JRE.

5.3. שינוי רמת המהדר

אם אנו מפיצים את היישום שלנו להפעלת JRE נמוך יותר, עלינו להתאים את רמת המהדר שלנו כדי למקד לגרסה הישנה יותר של Java.

בוא נלך ל קובץ -> מבנה פרויקט ... -> הגדרות פרויקט -> פרויקט ולשנות את שלנו פרויקט SDK ו רמת שפת הפרויקט:

כעת אנו יכולים לבנות את הפרויקט שלנו, וקבצי הכיתה שנוצרו יפעלו בג'אווה 8 ומעלה.

6. מייבן

כאשר אנו בונים ואורזים קובץ ב- Maven, אנו יכולים לשלוט בגירסת Java שאליה אנו מכוונים.

בעת שימוש בג'אווה 8 ומעלה, הגדרנו את המקור והיעד לתוסף המהדר.

בואו נקבע את המקור והיעד באמצעות מאפייני תוסף מהדר:

 1.8 1.8 

לחלופין, אנו יכולים להגדיר את המקור והיעד בתוסף המהדר:

  תוסף maven-compiler 1.8 1.8 

עם ה -לְשַׁחְרֵר אפשרות שנוספה ב- Java 9, נוכל להגדיר זאת גם עם Maven.

בואו נשתמש במאפיין תוסף מהדר כדי להגדיר את לְשַׁחְרֵר:

 8 

לחלופין, אנו יכולים להגדיר את תוסף המהדר ישירות:

  תוסף maven-compiler 8 

7. מסקנה

במאמר קצר זה למדנו מה גורם ל java.lang.UnsupportedClassVersionError: גרסה מז'ורית לא נתמכת. הודעת שגיאה וכיצד לתקן אותה.