Cách sửa java.lang.UnsupportedClassVersionError: Phiên bản Major.minor không được hỗ trợ


1573

Tôi đang cố gắng sử dụng Notepad ++ làm công cụ chỉnh sửa, chạy, biên dịch, v.v.

Tôi đã cài đặt JRE và tôi đã thiết lập biến đường dẫn của mình vào .../binthư mục.

Khi tôi chạy "Hello world" trong Notepad ++, tôi nhận được thông báo này:

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

Tôi nghĩ vấn đề ở đây là về các phiên bản; một số phiên bản của Java có thể cũ hoặc quá mới.

  1. Làm thế nào để tôi sửa nó?
  2. Tôi có nên cài đặt JDK và thiết lập biến đường dẫn của mình thành JDK thay vì JRE không?
  3. Sự khác biệt giữa PATHbiến trong JRE hoặc JDK là gì?

bạn đã cài đặt jdk chưa? jre là môi trường Java RunTime, để tạo các ứng dụng java, bạn cũng cần jdk
DETUS

vâng tôi đã làm, và bây giờ biến đường dẫn của tôi chỉ đến nơi jdk. nhưng tôi vẫn có lỗi "phiên bản nhỏ 51.0 không được hỗ trợ" này, bạn có nghĩ rằng tôi nên cài đặt phiên bản cũ hơn của jdk không? tôi đang sử dụng jdk 1.7.0
ERJAN

20
Điều này đã xảy ra với tôi trên Mac OS X khi tôi gặp sự cố do tình huống kỳ lạ của Apple java 6 và Oracle java 7 trên OSX những ngày này. phiên bản ngắn: Biên dịch với JDK7, Chạy với JDK6, lấy cái này.
Warren P

7
Trong java ClassName nên bắt đầu bằng chữ in hoa;)
Ashish Panery

5
Đối với El Captain, câu trả lời này đã sửa nó cho tôi: stackoverflow.com/a/34201991/1615594
tsuz

Câu trả lời:


1940

Số phiên bản hiển thị mô tả phiên bản của JRE, tệp lớp tương thích với.

Các số chính được báo cáo là:

Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
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

(Nguồn: Wikipedia )

Để khắc phục sự cố thực tế, bạn nên thử chạy mã Java với phiên bản Java JRE mới hơn hoặc chỉ định tham số đích cho trình biên dịch Java để hướng dẫn trình biên dịch tạo mã tương thích với các phiên bản Java trước đó.

Ví dụ: để tạo các tệp lớp tương thích với Java 1.4, hãy sử dụng dòng lệnh sau:

javac -target 1.4 HelloWorld.java

Với các phiên bản mới hơn của trình biên dịch Java, bạn có thể nhận được cảnh báo về đường dẫn lớp bootstrap không được đặt. Thông tin thêm về lỗi này có sẵn trong một bài đăng trên blog Cảnh báo javac mới để đặt nguồn cũ hơn mà không cần boot classpath .


167
"Số phiên bản được hiển thị mô tả phiên bản nào nếu Java được sử dụng để biên dịch mã." Không nó không. Nó hiển thị phiên bản của JRE mà tệp lớp tương thích. Sử dụng các tùy chọn biên dịch chéo, bạn có thể sử dụng JDK 1.7 để biên dịch mã với phiên bản lớp 1.1 (đến 1.7).
Andrew Thompson

85
Câu trả lời này không giải thích làm thế nào để sửa nó như câu hỏi được hỏi?
Jonathan Leung

7
Đây là một giải pháp hay để biên dịch trực tiếp lên phiên bản trước từ Eclipse: stackoverflow.com/a/16345710/2091700
Alphaaa

19
IN dự án nhật thực => Proerties => trình biên dịch java; đặt "mức tuân thủ trình biên dịch" thành phiên bản theo jre hoặc jdk của bạn. Đối với tôi, đó là 1.6 cho jre 1.6
Sam

5
Điều này có thể xảy ra khi nguồn trình biên dịch được đặt không tuân thủ với JRE / JDK hiện đang biên dịch. Ví dụ: tôi đã tìm thấy các giá trị dưới đây từ thư mục eclipse .sinstall, org.eclipse.jdt.core.compiler.compliance = 1.7, org.eclipse.jdt.core.compiler.source = 1.7, org.eclipse.jdt.core.compiler .codegen.targetPl platform = 1.7. Và trình biên dịch của tôi là 1.6.0_32. Vấn đề đã được giải quyết sau khi thay đổi các giá trị thành 1.6. Vấn đề bắt nguồn sau khi tôi sao chép dự án từ một không gian làm việc khác, nơi tôi đang sử dụng JDK 1.7 :(
Gana

367

java.lang.UnsupportedClassVersionError xảy ra do JDK cao hơn trong thời gian biên dịch và JDK thấp hơn trong thời gian chạy.


11
+1: thay đổi liên kết tượng trưng này ( /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java) thành phiên bản được sử dụng để biên dịch với javac đã giải quyết nó
ezdazuzena

1
Làm thế nào tôi có thể thực hiện thay đổi ở trên?
Ankur Raiyani

8
Dự án -> Thuộc tính -> Trình biên dịch Java Kích hoạt cài đặt cụ thể của dự án. Sau đó chọn Trình tuân thủ trình biên dịch thành 1.7, 1.6 hoặc 1.5, xây dựng và kiểm tra ứng dụng của bạn.
Vivek Kumar Ray

Khi tôi chuyển sang Java 7, bằng cách nào đó, Eclipse tiếp tục cố gắng chạy trong Java 6 ... không biết tại sao. Gỡ cài đặt JDK cũ đã lừa tôi.
HDave

9
@ezdazuzena dùng sudo update-alternatives --config javađể làm như vậy.
Thorbjørn Ravn Andersen

115

Trong Eclipse, tôi vừa đi tới lệnh menu Window -> Preferences -> Java -> Compiler và sau đó đặt "Mức tuân thủ trình biên dịch" thành 1.6.


3
Trong nhật thực, đôi khi các khía cạnh của dự án cũng cần được thay đổi thành phiên bản java thích hợp.
Bilal Mirza

6
Cảm ơn. Cần lưu ý rằng việc thiết lập môi trường thực thi mặc định của Eclipse (JRE đi trên đường dẫn xây dựng) là một cài đặt riêng . Tôi đã thiết lập JRE nhưng không phải là mức độ tuân thủ của trình biên dịch; Điều này đã sửa nó.
wchargein

Và làm thế nào bạn rút ra kết luận từ thông báo lỗi rằng đây là nơi thích hợp để đặt tùy chọn?
Alexander

Có lẽ điều này: stackoverflow.com/questions/7073485/ Có thể giúp đỡ nếu bạn đang sử dụng kiến ​​và nhật thực.
OuuGiii

Câu hỏi là về Notepad ++ nhưng không phải là Eclipse.
gotwo

60

Đừng lo lắng, tôi đã giải quyết nó.

Nó thực sự đơn giản - bạn cần cài đặt BÓNG JRE / JDK với cùng một phiên bản.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

Và như thế.


29
java 7 có thể xử lý 6 mà không có bất kỳ vấn đề quá.
damienix

@damienix Có lẽ bạn muốn xác định rằng JRE Java 7 có thể xử lý một lớp được biên dịch Java 6 mà không có vấn đề gì, nếu không câu lệnh của bạn dẫn đến nhầm lẫn.
Mặt trận

43

Lỗi này có nghĩa là bạn đang cố tải một tệp "lớp" Java được biên dịch với phiên bản Java mới hơn bạn đã cài đặt.

Ví dụ: .classtệp của bạn có thể đã được biên dịch cho JDK 7 và bạn đang cố chạy nó với JDK 6.

Vì vậy, giải pháp là:

  • Nâng cấp thời gian chạy Java của bạn hoặc
  • Biên dịch lại lớp nếu bạn có nguồn, sử dụng trình biên dịch Java cục bộ (nếu bạn có).

    Tên tệp javac.java

Đối với các nhà phát triển, điều này có thể xảy ra nếu một nhà phát triển khác kiểm tra tệp. Class và họ đã có phiên bản java mới hơn bạn có!


22

Bạn đang cố chạy chương trình của mình với phiên bản Java không hỗ trợ phiên bản mã được biên dịch. Vì vậy, về cơ bản, bạn phải biên dịch mã của mình với phiên bản cao hơn và cố gắng chạy mã bằng phiên bản thấp hơn.

Như bạn đang nhận được

Unsupported major.minor version 51.0

và phiên bản 51.0 tương ứng với J2SE 7, rất có thể bạn đã biên dịch mã của mình trong Java 7 và cố gắng chạy nó bằng phiên bản thấp hơn. Kiểm tra những gì java -versionhiển thị. Nó phải là phiên bản Java 7. Nếu không thực hiện các thay đổi phù hợp trong PATH / JAVA_HOME. Hoặc bạn có thể biên dịch với cùng một phiên bản mà bạn đang cố chạy mã. Nếu các cấu hình khó hiểu, bạn luôn có thể đưa ra đường dẫn tuyệt đối /home/user/jdk1.7.0_11/bin/javac/home/user/jdk1.7.0_11/bin/java.


18

Tôi đã có một tình huống tương tự trên Mac và quy trình sau đây có hiệu quả với tôi:

Trong thiết bị đầu cuối, gõ

vi ~/.profile

Sau đó thêm dòng này vào tệp và lưu

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

trong đó phiên bản là máy tính của bạn, chẳng hạn như 1.7.0_25.

Thoát khỏi trình chỉnh sửa, sau đó nhập lệnh sau để làm cho nó có hiệu lực

source ~/.profile 

Sau đó nhập java -version để kiểm tra kết quả

java -version 

.profileTập tin là gì?

Tập tin .profile là một tập tin ẩn. Đây là một tệp tùy chọn cho hệ thống biết lệnh nào sẽ chạy khi người dùng có tệp hồ sơ được đăng nhập. Ví dụ: nếu tên người dùng của tôi là bruno và có tệp .profile trong / Users / bruno /, tất cả nội dung của nó sẽ được thực hiện trong quá trình đăng nhập.

Nguồn: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515


16

Trong cửa sổ menu của Eclipse -> Tùy chọn -> Java -> Trình biên dịch Kiểm tra cũng "Định cấu hình cài đặt cụ thể của dự án".

Nếu bạn vẫn có lỗi với cùng một phiên bản Java: hãy thử xóa thư mục bản dựng của dự án của bạn theo cách thủ công. Sau đó khởi động lại Eclipse.


14

Bạn có thể có một số thư viện JAR được biên dịch trong Java 7 và bạn chỉ có Java 6 là Java Runtime. Nó có thể xảy ra với một số thư viện mới.


14

Vấn đề phổ biến nhất là cấu hình sai của JAVA_HOMEbiến của bạn sẽ trỏ đến thư viện Bộ công cụ phát triển Java phù hợp, nếu bạn đã cài đặt nhiều.

Để tìm vị trí thư mục SDK Java, hãy chạy các lệnh sau:

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

Debian / Ubuntu

Để kiểm tra java (openjdk) nào bạn đã cài đặt, hãy kiểm tra qua:

dpkg -l "openjdk*" | grep ^i

hoặc là:

update-java-alternatives -l

Để thay đổi nó, sử dụng:

update-alternatives --config java

Tiền tố với sudonếu được yêu cầu.

để chọn phiên bản java thay thế.

Hoặc kiểm tra những thứ có sẵn để cài đặt:

apt-cache search ^openjdk

Tiền tố với sudonếu được yêu cầu.

Sau đó, bạn có thể cài đặt, ví dụ:

apt-get install openjdk-7-jre

Tiền tố với sudonếu được yêu cầu.

Fedora, Oracle Linux, Mũ Đỏ

Cài đặt / nâng cấp gói thích hợp thông qua:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

Các java-1.7.0-openjdkgói chỉ chứa Java Runtime Environment. Nếu bạn muốn phát triển các chương trình Java thì hãy cài đặt java-1.7.0-openjdk-develgói.

BSD

Có một gói OpenJDK 7 trong bộ sưu tập Cổng FreeBSD được gọi là openjdk7 có lẽ cần phải được cấu hình lại.

Xem: trang wiki OpenJDK .

các cửa sổ

Chỉ cần cài đặt thư viện Bộ công cụ phát triển Java SE thích hợp từ trang web của Oracle hoặc cài đặt

Jenkins

Nếu bạn đang gặp vấn đề này với Jenkins, hãy xem:

Tuy nhiên, việc chọn đúng phiên bản Java (mới hơn) update-alternativessẽ hoạt động.


Câu trả lời này có hiệu quả với tôi khi cố gắng sử dụng spark2-shell trên máy chủ sau khi thêm dịch vụ tia lửa vào một cụm với cloudera.
Thay đổi

12

Tôi đã gặp phải vấn đề tương tự khi tôi làm việc với tập lệnh Ant để xây dựng ứng dụng của mình.

Tôi sử dụng Eclipse để phát triển ứng dụng của mình và tôi đã thay đổi phiên bản trình biên dịch trong các thuộc tính xây dựng của dự án. Nhưng điều đó không làm việc cho tôi. Sau đó tôi phát hiện ra rằng tôi có thể cung cấp phiên bản trình biên dịch trong tập lệnh Ant.

Tôi đã sửa đổi tập lệnh Ant tại phần biên dịch các tệp Java.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

Điều này làm việc cho tôi để giải quyết vấn đề nhỏ không được hỗ trợ.



12

Tôi gặp vấn đề tương tự với một dự án được viết vào năm 1.7 và đã cố gắng thực hiện trong 1.6.

Giải pháp của tôi trong Eclipse:

  • Nhấp chuột phải vào Thuộc tính dự án của bạn -> Đường dẫn xây dựng Java -> Thư viện

  • Chọn Thư viện hệ thống JRE của bạn và nhấp vào Chỉnh sửa ở bên phải và chọn JRE mục tiêu.

  • Bây giờ, hãy đi tới Trình biên dịch Java ở bên trái và thay đổi mức độ tuân thủ Trình biên dịch thành mục tiêu của bạn.

Điều đó làm việc cho tôi.


11

Như một số người đã trả lời, chương trình Java đang được chạy trên một phiên bản Java cũ hơn so với phiên bản mà nó đã được biên dịch. Nó cần phải được "biên dịch chéo" để tương thích ngược. Nói cách khác, có một sự không phù hợp giữa các phiên bản Java nguồn và đích.

Thay đổi tùy chọn trong các menu Eclipse không trả lời người đăng ban đầu, người nói rằng anh ấy / cô ấy không sử dụng Eclipse. Trên OpenJDK javac phiên bản 1.7, bạn có thể biên dịch chéo cho 1.6 nếu bạn sử dụng các tham số -source-targetcộng với cung cấp rt.jar -file của phiên bản đích (nghĩa là phiên bản cũ hơn) vào thời gian biên dịch. Nếu bạn thực sự cài đặt 1.6 JRE, bạn có thể trỏ đến cài đặt của nó (ví dụ: /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar trên Ubuntu, / usr / jdk / jdk1. Rõ ràng 6.0_60 / jre / lib / rt.jar trên SunOS. Xin lỗi, tôi không biết nó ở đâu trên hệ thống Windows). Thích như vậy:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

Có vẻ như bạn chỉ có thể tải xuống rt.jar từ Internet và trỏ đến nó. Điều này không quá thanh lịch mặc dù:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java

10

Dựa vào cái này...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

Trong Eclipse, nhấp chuột phải vào dự án trong gói explorer:

Xây dựng đường dẫn -> Cấu hình đường dẫn xây dựng

Dưới:

Đường dẫn xây dựng Java -> Thư viện -> Thêm thư viện -> Thư viện hệ thống JRE -> JREs đã cài đặt -> Tìm kiếm .

Thêm JRE cần thiết bằng cách chọn thư viện trong danh sách có sẵn sau khi tìm kiếm hoàn tất.


10
  • Nếu bạn sử dụng Maven, hãy đặt mức biên dịch Java của bạn. Mở một dòng lệnh và viết java -versioncho cấp độ biên dịch của bạn:

    Nhập mô tả hình ảnh ở đây

  • Nếu bạn sử dụng IntelliJ IDEA, chọn dự án → TệpCài đặtXây dựng triển khai thực thiTrình biên dịchTrình biên dịch Java . Sau đó thay đổi mã byte thành 1.7 như hình ảnh này:

    Nhập mô tả hình ảnh ở đây


Tôi cần phải thực hiện cài đặt maven sạch sau khi thay đổi pom.
Joe Borysko

10

Nếu bạn gặp phải vấn đề này trong khi sử dụng Maven , bạn có thể biên dịch mã của mình bằng Trình biên dịch Maven bổ trợ .

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

CẬP NHẬT: đặt sourcetargetthành 1.8, nếu bạn đang sử dụng JDK 8.


một đoạn trích về cách sử dụng plugin để biên dịch chéo sẽ rất tốt thay vì truy cập / mở liên kết
mã hóa_idiot

8

Tôi đã có thông báo lỗi tương tự khi chạy Ant từ Eclipse, nhưng các giải pháp khác được đề cập ở đây không giải quyết được vấn đề của tôi. Điều buồn cười là việc chạy Ant từ dòng lệnh Windows đã chạy tốt, do đó nó phải là một vấn đề cấu hình trong Eclipse.

Hóa ra trong Eclipse, bạn có thể chỉ định môi trường mà Ant sẽ chạy cùng và điều này được đặt là JRE thay vì JDK.

  • Truy cập: Chạy -> Công cụ bên ngoài -> Cấu hình công cụ bên ngoài ...
  • Chọn Ant build.xml cho dự án của bạn (nếu bạn có nhiều dự án)
  • Kích hoạt Tab 'JRE'
  • Ở đây đã được chọn 'Riêng JRE: jre6'. Khi tôi thay đổi điều này thành JDK từ loạt 1.6 hoặc 1.7, lỗi đã biến mất.

8

Làm thế nào để tôi sửa nó?

Lỗi này có nghĩa là JRE đang được sử dụng để thực thi mã lớp của bạn không nhận ra phiên bản Java được sử dụng. Thông thường vì phiên bản Java đã tạo tệp lớp của bạn (tức là đã biên dịch nó) mới hơn.

Để sửa nó, bạn có thể

a) Biên dịch các nguồn Java của bạn với cùng một phiên bản hoặc cũ hơn của trình biên dịch Java như sẽ được sử dụng để chạy nó. tức là cài đặt JDK thích hợp.

b) Biên dịch các nguồn Java của bạn với phiên bản mới hơn của trình biên dịch Java nhưng ở chế độ tương thích. tức là sử dụng-target tham số.

c) Chạy các lớp đã biên dịch của bạn trong một JRE giống với phiên bản mới hơn hoặc mới hơn như JDK được sử dụng để biên dịch các lớp.

Bạn có thể kiểm tra các phiên bản bạn hiện đang sử dụng với javac -versiontrình biên dịch và java -versionthời gian chạy.

Tôi có nên cài đặt JDK và thiết lập biến PATH của mình thành JDK thay vì JRE không?

Để biên dịch, chắc chắn, cài đặt và cấu hình JDK cụ thể mà bạn muốn.

Đối với thời gian chạy, bạn có thể sử dụng phiên bản đi kèm với JDK hoặc JRE độc lập, nhưng bất kể, hãy đảm bảo rằng bạn đã cài đặt đúng phiên bản và bạn đã cấu hình PATH của mình sao cho không có gì bất ngờ.

Sự khác biệt giữa biến PATH trong JRE hoặc JDK là gì?

Biến môi trường PATH báo cho shell lệnh nơi tìm kiếm lệnh bạn nhập. Khi bạn nhập java, trình thông dịch shell lệnh sẽ xem qua tất cả các vị trí được chỉ định trong PATHbiến, từ trái sang phải, để tìm javathời gian chạy thực thi phù hợp để chạy. Nếu bạn đã cài đặt nhiều phiên bản Java - tức là bạn cójava khả năng thực thi ở nhiều vị trí được chỉ định trong biến PATH, thì phiên bản đầu tiên gặp phải khi đi từ trái sang phải sẽ là phiên bản được thực thi.

Lệnh trình biên dịch là javacvà chỉ đi kèm với JDK. Lệnh runtime là javavà đi kèm với JDK và nằm trong JRE.

Có khả năng bạn đã javaccài đặt một phiên bản (51.0 = Java 7) và bạn cũng có phiên bản javacài đặt tương tự , nhưng phiên bản khác trước đó javasẽ xuất hiện trước đó trong PATH và do đó được gọi thay vì phiên bản bạn mong đợi .


7

Bạn đã sử dụng phiên bản cao hơn của JDK để biên dịch và cố gắng chạy từ phiên bản thấp hơn của JDK / JRE .

Để kiểm tra điều này, xem thông tin phiên bản:

javac -version

java -version

Chúng sẽ khác nhau và javac sẽ có số phiên bản cao hơn.

Để giải quyết vấn đề này, hãy chạy bằng java từ phiên bản JDK hoặc nếu bạn có JRE / JDK mới hơn cũng sẽ hoạt động.

which javacsẽ cho bạn biết vị trí, ví dụ , /usr/bin/javac. Chỉ cần chạy trực tiếp bằng cách sử dụng /usr/bin/java <program>.

HOẶC bạn có thể đặt biến môi trường làm giải pháp vĩnh viễn.


6

Có vấn đề này khi tôi trở lại Java 6 và cố gắng chạy các lớp được biên dịch trước đó với Java 7. Điều làm việc cho tôi là Tùy chọn> java> trình biên dịch -> đặt mức tuân thủ thành 1.6 và "cấu hình cài đặt dự án" một cách chủ yếu.


6

Hôm nay, thông báo lỗi này đã xuất hiện trong Tomcat 7 của chúng tôi trên Ubuntu 12.04.2 LTS (Pangolin chính xác):

/var/log/tomcat7/localhost.2014-04-08.log:
ngày 8 tháng 4 năm 2014 9:00:55 AM org.apache.cirthina.core.St ChuẩnContext filterStart SEVERE
: Bộ lọc bắt đầu ngoại lệ struts2
java.lang.UnsupportedClassVersionError / ReqAccept: Không được hỗ trợ Major.minor phiên bản 51.0 (không thể tải trình điều khiển lớp.ReqAccept)

Các Struts ứng dụng được biên soạn với Java 7.

Hóa ra, ai đó sử dụng "dịch vụ tomcat [dừng / bắt đầu]" để khởi động lại 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
phiên bản java "1.6.0_27"

Điều này gây ra lỗi "Không được hỗ trợ Major.minor phiên bản 51.0".

Khi chúng tôi sử dụng "/etc/init.d/tomcat7 [stop / start]" để khởi động lại Tomcat 7, vấn đề đã được giải quyết.

$ 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
phiên bản java "1.7.0_15"


6

Tôi đã giải quyết nó. Tôi đã chạy

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

Lỗi là sai lệch Unsupported major.minor version 51.0,. Điều này mang lại ấn tượng rằng phiên bản 51 (Java 7) không được hỗ trợ. Và chúng ta nên sử dụng Java 6.

Lỗi đáng lẽ phải là:

Phiên bản Java hiện tại, 50, không được hỗ trợ. Thay vào đó, sử dụng phiên bản Java 7 (51: 0 trở lên) .`


6

Tệp Java của bạn được biên dịch với một phiên bản khác (phiên bản trình biên dịch cao hơn) so với phiên bản (phiên bản thời gian chạy thấp hơn) mà bạn đang cố gắng chạy nó với.

Đó là sự hiểu biết cơ bản rằng các lớp được biên dịch với các phiên bản thấp hơn dự kiến ​​sẽ chạy trong các phiên bản cao hơn sau này. Nhưng điều ngược lại (được biên dịch với phiên bản trình biên dịch cao hơn và cố gắng chạy nó với phiên bản thời gian chạy thấp hơn) đôi khi không thể thực hiện được.

Do đó bạn được hiển thị lỗi này, khi cố gắng thực hiện chương trình của bạn. Phiên bản chính.minor xx không được hỗ trợ

H: Tôi đã tạo một ứng dụng trong Java 7, nhưng khi người dùng của tôi cố chạy nó, họ gặp lỗi không được hỗ trợ Major.minor phiên bản 51.0. Điều này có nghĩa là gì và tôi có thể làm gì về nó?

Trả lời: Nếu bạn biên dịch một ứng dụng bằng javac trong Java 7, các tệp lớp kết quả sẽ có số phiên bản 51.0. Các phiên bản Java trước 7 không nhận ra số này, vì vậy người dùng của bạn sẽ phải nâng cấp lên Java 7 trước khi chạy ứng dụng của bạn. Nếu bạn không sử dụng bất kỳ API Java 7 nào, bạn có thể thử biên dịch ứng dụng của mình bằng cách sử dụng javac -target 1.6 để tạo tệp lớp tương thích 1.6. Nếu ứng dụng của bạn được triển khai bằng cách sử dụng webstart, bạn có thể chỉ định phiên bản tối thiểu được yêu cầu. Để biết thêm thông tin, hãy xem các tài liệu về Java Web Start và JNLP tại đây. Vấn đề này sẽ biến mất khi chúng tôi kích hoạt tự động chuyển sang Java 7 cho người dùng cuối hiện đang có Java 6 trên máy tính để bàn của họ. Dòng thời gian cho việc này chưa được xác định, chúng tôi muốn cho các nhà phát triển thời gian để giải quyết bất kỳ vấn đề nào giữa mã của họ và JDK 7 trước tiên.

(Nguồn: oracle.com .)


5

Oh Mac OS XI đã có thể giải quyết vấn đề này bằng cách đặt biến JAVA_HOME:

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

4

Trước tiên, hãy lấy một số điều cơ bản ngay ...

JRE là một thành phần trong NetBeans / Eclipse / độc lập sẽ cung cấp cho bạn các thư viện, JVM, các trình cắm Java và web Java bắt đầu. Lưu ý rằng nó không cung cấp trình biên dịch hoặc trình gỡ lỗi.

JDK là superset của JRE cùng với các trình biên dịch và trình gỡ lỗi.

Vì vậy, khi bạn có thư viện mặc định của mình dưới dạng JRE thay vì JDK, bạn sẽ có một thời gian tốt để nhập nội dung, nhưng nó sẽ không được biên dịch.

Thay vào đó, hãy đặt đường dẫn của bạn thành JDK (Tôi sử dụng NetBeans và tôi đặt chúng bằng netbeans.conf trong netbeans / etc / netbeans.conf và thay đổi đường dẫn).


3

Tôi gặp vấn đề khi tôi phải chạy một trình biên dịch Maven trong dự án của tôi từ dòng lệnh để chạy các bài kiểm tra đơn vị của tôi; nếu tôi thực hiện thay đổi cho lớp thử nghiệm và để Eclipse tự động biên dịch lại nó, thì tôi đã gặp lỗi "Không được hỗ trợ Major.minor phiên bản 51.0".

Tôi đã cài đặt cả JDK6 và JDK7, nhưng tất cả các cài đặt JRE của tôi đều trỏ đến 1.6, cả trong pom và từ trang thuộc tính dự án trong Eclipse. Không có dự án cập nhật Maven nào và / hoặc làm mới giải quyết điều này.

Cuối cùng tôi đã thử đóng dự án và mở lại, và điều này dường như đã khắc phục nó! HTH


3

Bạn đã biên dịch lớp Java của mình với JDK 7 và bạn đang cố chạy cùng một lớp trên JDK 6.


3
  • Cài đặt JDK 7.0.55 và đặt Java cho Eclipse cho JDK 7.0.55.
  • Xây dựng dự án với JDK 7.0.55 bằng cách định cấu hình trên đường dẫn xây dựng JDK 7.0.55.
  • Đặt trình biên dịch trong Eclipse cho JDK 7.0.55 theo menu Windows -> Preferences -> Java -> Compiler - chọn 1.7.

3

Câu trả lời cho vấn đề:

Ngoại lệ trong luồng "chính" java.lang.UnsupportedClassVersionError: edu / stevens / cs549 / dhts / main / LocalContext: Không được hỗ trợ Major.minor phiên bản 52.0

Tôi đã có cùng một vấn đề. Đối với những người gặp rắc rối này trong các trường hợp AWS ec2, và bằng cách nào đó đã được chuyển hướng đến câu hỏi này. Tôi đang trả lời cho những điều đó, và muốn chia sẻ rằng tôi đã làm điều đó như thế nào. Tôi đã gặp sự cố vì các phiên bản Amazon EC2 đang chạy phiên bản java 1.7 và có thể dự án của tôi không tương thích với nó vì tôi đang sử dụng Maven và nó được cấu hình sẵn cho java 1.8. Vì vậy, tôi đã cài đặt phiên bản mới của java:

sudo yum -y install java-1.8.0

Và sau đó, bước quan trọng là loại bỏ phiên bản cũ hơn:

sudo yum remove java-1.7.0-openjdk

Hãy nhớ xóa nó sau khi cài đặt phiên bản mới, nếu không nó sẽ liên tục sử dụng cùng một phiên bản cũ hơn và tôi hy vọng nó sẽ giải quyết vấn đề của bạn, điều này đã xảy ra trong trường hợp của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.