Trong hướng dẫn ngắn này, chúng ta sẽ tìm hiểu nguyên nhân gây ra lỗi thời gian chạy Java java.lang.UnsupportedClassVersionError: Phiên bản major.minor không được hỗ trợ và cách khắc phục.
Hãy bắt đầu bằng cách xem một ví dụ:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/baeldung/MajorMinorApp has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Lỗi này cho chúng tôi biết rằng lớp đã được biên dịch ở phiên bản Java cao hơn so với phiên bản đang có trên máy. Cụ thể hơn, lớp đã được biên dịch lớp của mình bằng Java 11 và nhưng chạy trên Java 8.
Số phiên bản Java
Chúng ta hãy xem nhanh các số phiên bản Java. Sẽ hữu ích trong trường hợp chúng ta cần tải xuống phiên bản Java thích hợp. Số phiên bản chính và phụ được lưu trữ trong mã byte của lớp ở byte thứ 6 và byte thứ 7.
Cách đánh số version 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
Giải pháp
Bây giờ hãy xem cách chúng ta có thể khắc phục lỗi này khi chạy Java từ dòng lệnh.
Tùy thuộc vào tình huống, có hai cách để giải quyết lỗi này: biên dịch mã của trên phiên bản Java cũ hơn hoặc chạy mã trên phiên bản Java mới hơn. Nếu chúng ta cần sử dụng thư viện của bên thứ ba đã được biên dịch ở mức cao hơn, thì tùy chọn tốt nhất có lẽ là chạy ứng dụng của mình bằng phiên bản Java mới hơn. Nếu đang đóng gói một ứng dụng để phân phối, tốt nhất nên biên dịch thành phiên bản cũ hơn.
Thay đổi biến môi trường JAVA_HOME
Hãy kiểm tra biến Java_HOME của trên máy được thiết lập như thế nào. Việc này sẽ cho biết JDK nào đang được sử dụng khi chạy javac từ dòng lệnh:
echo %JAVA_HOME% C:\Apps\Java\jdk8-x64
Nếu có ý định chuyển hoàn toàn sang JDK mới hơn, bạn có thể tải xuống phiên bản mới hơn và đảm bảo rằng các biến môi trường PATH và Java_HOME được đặt phù hợp.
Chạy trên JRE mới
Quay trở lại ví dụ trước, cách giải quyết lỗi bằng cách chạy nó ở phiên bản Java cao hơn. Giả sử chúng ta có Java 11 JRE trong C:\Apps\jdk-11.0.2, chúng ta có thể chạy mã của mình bằng lệnh java được đóng gói cùng với nó:
C:\Apps\jdk-11.0.2\bin\java co.devopsify.MajorMinorApp Hello World!