jdk 如何修復java.lang.UnsupportedClassVersionError:不支持的major.minor版本




jdk version 52 (24)

當我恢復到Java 6並嘗試運行之前用Java 7編譯的類時,遇到了這個問題。對我而言,Preferences> java> compiler - >將合規性級別設置為1.6,關鍵是“配置​​項目設置”。

我正在嘗試使用Notepad++作為我的所有功能於一身的工具編輯,運行,編譯等。

我安裝了JRE ,並將路徑變量設置為... / bin目錄。

當我在Notepad ++中運行“Hello world”時,出現以下消息:

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. JRE或JDK中的PATH變量有什麼區別?

我遇到了這個問題,我不得不從命令行運行一個Maven編譯來運行我的單元測試; 如果我對測試類進行了更改並讓Eclipse自動重新編譯它,那麼我得到了“Unsupported major.minor version 51.0”錯誤。

我確實安裝了JDK6和JDK7,但是我所有的JRE設置都指向1.6,無論是在pom中還是在Eclipse中的項目屬性頁面中。 沒有多少Maven Update Project和/或刷新解決了這個問題。

最後,我嘗試關閉該項目並重新打開它,這似乎解決了它! HTH


您可以在Java 7中編譯一些JAR庫,並且只有Java 6作為Java Runtime。 它可能會發生在一些新的圖書館。


  • 如果您使用Maven,請設置您的Java編譯級別。 打開命令行並為您的編譯級別編寫java -version

  • 如果您使用IntelliJ IDEA,請選擇項目→ 文件設置構建執行部署編譯器Java編譯器 。 然後像這樣的圖像更改字節代碼為1.7:


您已經使用JDK 7編譯了Java類,並且正在嘗試在JDK 6上運行相同的類。


您已經使用更高版本的JDK進行編譯並嘗試從較低版本的JDK / JRE

要檢查這一點,請參閱版本信息:

javac -version

java -version

它們會有所不同,並且javac會有更高的版本號。

為了解決這個問題,從JDK版本運行java,或者如果你有一個更新的JRE / JDK,它也可以工作。

which javac會告訴你位置,例如/usr/bin/javac 。 只需直接使用/usr/bin/java <program>

或者您可以將環境變量設置為永久解決方案。


哦,Mac OS XI能夠通過設置JAVA_HOME變量來解決這個問題:

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

在Eclipse中,我剛剛進入菜單命令窗口 - > 首選項 - > Java - > 編譯器 ,然後將“編譯器合規性級別”設置為1.6。


這個錯誤意味著你正試圖加載一個Java版本的“class”文件,該文件是用比你安裝的更新版本的Java編譯的。

例如,您的.class文件可能已經針對JDK 7進行了編譯,並且您正嘗試使用JDK 6來運行它。

所以解決方案是:

  • 升級您的Java運行時或
  • 如果有源代碼,請使用本地Java編譯器(如果有的話)重新編譯該類。

    javac FileName.java

對於開發人員來說,如果其他開發人員檢查.class文件,就會發生這種情況,並且他們已經擁有比您擁有的更新版本的Java!


從Eclipse運行Ant時出現相同的錯誤消息,但這裡提到的其他解決方案並未解決我的問題。 有趣的是,從Windows命令行運行Ant運行良好,所以它必須是Eclipse中的配置問題。

事實證明,在Eclipse中,您可以指定Ant應該運行的環境,並將其設置為JRE而不是JDK。

  • 轉到:運行 - >外部工具 - >外部工具配置...
  • 為您的項目選擇Ant build.xml(如果您有多個項目)
  • 激活選項卡'JRE'
  • 這裡被選中'獨立JRE:jre6'。 當我將其改為1.6或1.7系列的JDK時,錯誤消失了。

  • 安裝JDK 7.0.55並為JDK 7.0.55設置Java for Eclipse
  • 通過在構建路徑JDK 7.0.55上配置,使用JDK 7.0.55構建項目。
  • 通過菜單Windows - > 首選項 - > Java - > 編譯器 - 在Eclipse中為JDK 7.0.55 設置 編譯器 ,選擇1.7。

我用1.7編寫的項目遇到了同樣的問題,並試圖在1.6中執行。

我在Eclipse中的解決方案:

  • 右鍵單擊您的項目屬性 - > Java構建路徑 - >庫

  • 選擇您的JRE系統庫,然後單擊右側的編輯 ,然後選擇目標JRE。

  • 現在轉到左邊的Java編譯器 ,並將編譯器合規性級別更改為您的目標。

這對我有效。


別擔心,我解決了它。

其實很簡單 - 你需要安裝相同版本的BREH JRE / JDK。

JRE 6 - > JDK 6

JRE 7 - > JDK 7

等等。


當我使用Ant腳本構建我的應用程序時,我遇到了同樣的問題。

我使用Eclipse進行應用程序開發,並且在項目的構建屬性中更改了編譯器版本。 但是這對我沒有用。 然後我發現我可以在Ant腳本中提供編譯器版本。

我在它編譯Java文件的部分修改了Ant腳本。

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

這有助於我解決不受支持的主要小問題。


我解決了它。 我跑了:

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

錯誤是誤導, Unsupported major.minor version 51.0 。 這給人的印像是不支持版本51(Java 7)。 我們應該使用Java 6。

錯誤應該是:

當前的Java版本50不受支持。 改用Java版本7(51:0及更高版本)


我在Mac上有類似的情況,下面的過程對我有用:

在終端中輸入

vi ~/.profile

然後在文件中添加這一行,並保存

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

版本是計算機上的版本,例如1.7.0_25

退出編輯器,然後輸入以下命令使其生效

source ~/.profile 

然後輸入java -version來檢查結果

java -version 

什麼是.profile文件?

.profile文件是一個隱藏文件。 它是一個可選文件,告訴系統當其用戶的配置文件登錄時要運行哪些命令。例如,如果我的用戶名是bruno,並且/ Users / bruno /中有一個.profile文件,則其所有內容將在登錄過程中執行。

資料來源: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515 : http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515


正如幾個人在其他地方回答的那樣,Java程序正在運行在一個Java版本的舊版本上,而不是它編譯的版本。 為了向後兼容,它需要被“交叉編譯”。 換句話說,源版本和目標Java版本之間存在不匹配。

在Eclipse菜單中更改選項不會回答原始海報,他/她表示他/她沒有使用Eclipse。 在OpenJDK javac版本1.7上,如果使用參數-source-target ,則可以交叉編譯1.6,並且在編譯時提供目標版本(即較舊版本)的rt.jar文件。 如果實際安裝1.6 JRE,則可以指向其安裝(例如,Ubuntu上的/usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar,/ usr / jdk / jdk1。顯然,SunOS的6.0_60 / jre / lib / rt.jar對不起,我不知道它在Windows系統上的位置)。 像這樣:

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

顯示的版本號描述了類文件兼容的JRE版本。

報導的主要數據是:

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

(來源: Wikipedia

要解決實際問題,您應該嘗試使用更新版本的Java JRE運行Java代碼,或者指定Java編譯器的目標參數以指示編譯器創建與早期Java版本兼容的代碼。

例如,為了生成兼容Java 1.4的類文件,請使用以下命令行:

javac -target 1.4 HelloWorld.java

使用較新版本的Java編譯器,您可能會收到關於未設置引導程序類路徑的警告。 有關此錯誤的更多信息,請參閱博客文章新建javac警告,以便在不使用bootclasspath的情況下設置較舊的源代碼


今天,這個錯誤信息出現在Ubuntu 12.04.2 LTS (Precise Pangolin)的Tomcat 7中:

/var/log/tomcat7/localhost.2014-04-08.log:
Apr 8,2014 9:00:55 AM org.apache.catalina.core.StandardContext filterStart
嚴重:例外開始過濾器struts2
java.lang.UnsupportedClassVersionError:controller / ReqAccept:不支持major.minor版本51.0(無法加載類控制器.ReqAccept)

Struts應用程序使用Java 7進行編譯。

原來,有人使用“service 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
java版本“1.6.0_27”

這會導致“不受支持的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
java版本“1.7.0_15”


首先讓我們了解一些基本知識...

JRE是NetBeans / Eclipse / standalone中的一個組件,它將為您提供庫,JVM,Java插件和Java Web Start。 請注意,它不提供編譯器或調試器。

JDK是JRE的超集以及編譯器和調試器。

因此,當您將默認庫作為JRE而不是JDK時,您將有很好的時間導入內容,但不會編譯。

相反,請將路徑設置為JDK(我使用NetBeans,並在netbeans / etc / netbeans.conf中使用netbeans.conf設置它們並更改路徑)。


java.lang.UnsupportedClassVersionError是由於在編譯期間JDK較高而JDK在運行時較低而發生的。


當我安裝JDK 1.7時,問題解決了。


如果您在使用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>
       .....

更新:如果您使用的是JDK 8,請將sourcetarget設置為1.8


在Eclipse的菜單窗口 - > 首選項 - > Java - > 編譯器中選中“配置項目特定設置”。

如果你仍然有相同的Java版本的錯誤:嘗試手動刪除項目的生成文件夾。 然後重新啟動Eclipse。





unsupported-class-version