unsupported major.minor version 解決方案

來源:互聯網
上載者:User

標籤:

  轉載自http://hi.baidu.com/fatchong/blog/item/191da23b478bbfef15cecbae.html

        一直以來都是用jdk1.5,這次重返電信由於其系統是在jdk1.4上編譯的,編譯的時候出現了unsupported major.minor version49.0的錯誤,上網查看了一下還是一個很普遍的錯誤,搗鼓了兩天終於搗鼓出一些東西,現分享給大家。

     何謂 major.minor,且又居身於何處呢?先感性認識並找到 major.minor 來。順便寫一段 代碼,然後用 JDK 1.5 的編譯器編譯成class,用UltraEdit或者其他能開啟非十進位檔案的軟體開啟此class,見:        

 

       從中我們看出來了什麼是 major.minor version 了,它相當於一個軟體的主次版本號碼,只是在這裡是標識的一個 Java Class 的主要版本號和次版本號碼,同時我們看到 minor_version 為 0x0000,major_version 為 0x0031,轉換為十制數分別為0 和 49,即 major.minor 就是 49.0 了。

      現在不妨從 JDK 1.1 到 JDK 1.7 編譯器編譯出的 class 的預設 minor.major version 吧。(又走到 Sun 的網站上翻騰出我從來都沒用過的古董來)
     

JDK 編譯器版本 target 參數 十六進位 minor.major 十進位 minor.major
jdk1.1.8 不能帶 target 參數 00 03 00 2D 45.3
jdk1.2.2 不帶(預設為 -target 1.1) 00 03 00 2D 45.3
jdk1.2.2 -target 1.2 00 00   00 2E 46.0
jdk1.3.1_19 不帶(預設為 -target 1.1) 00 03 00 2D 45.3
jdk1.3.1_19 -target 1.3 00 00   00 2F 47.0
j2sdk1.4.2_10 不帶(預設為 -target 1.2) 00 00   00 2E 46.0
j2sdk1.4.2_10 -target 1.4 00 00   00 30 48.0
jdk1.5.0_11 不帶(預設為 -target 1.5) 00 00   00 31 49.0
jdk1.5.0_11 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.6.0_01 不帶(預設為 -target 1.6) 00 00   00 32 50.0
jdk1.6.0_01 -target 1.5 00 00   00 31 49.0
jdk1.6.0_01 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.7.0 不帶(預設為 -target 1.6) 00 00   00 32 50.0
jdk1.7.0 -target 1.7 00 00   00 33 51.0
jdk1.7.0 -target 1.4 -source 1.4 00 00   00 30 48.0
Apache Harmony 5.0M3 不帶(預設為 -target 1.2) 00 00   00 2E 46.0
Apache Harmony 5.0M3 -target 1.4 00 00   00 30 48.0

 

       當然你也可以用其他方法查看版本號碼,比如javap -verbose XXXX(class名)。

        那麼現在如果碰到這種問題該知道如何解決了吧,還會像我所見到有些兄弟那樣,去找個 1.4 的 JDK 下載安裝,然後用其重新編譯所有的代碼嗎?且不說這種方法的繁瑣,而且web應用程式還不一定能成功,其實大可不必如此費神,我們一定還記得 javac 還有個 -target 參數,對啦,可以繼續使用 1.5 JDK,編譯時間帶上參數 -target 1.4 -source 1.4 就 OK 啦,不過你一定要對哪些 API 是 1.5 JDK 加入進來的了如指掌,不能你的 class 檔案拿到 JVM 1.4 下就會 method not found。目標 JVM 是 1.3 的話,編譯選項就用 -target 1.3 -source 1.3 了。

      相應的如果使用 ant ,它的 javac 任務也可對應的選擇 target 和 source

<javac target="1.4" source="1.4" ............................/>

如果是在開發中,可以肯定的是現在真正算得上是 JAVA IDE 對於工程也都有編譯選項設定目標代碼的。例如 Eclipse 的項目屬性中的 Java Compiler 設定,

 

        

        其實理解 major.minor 就像是我們可以這麼想像,同樣是微軟體的程式,32 位的應用程式不能拿到 16 位系統中執行那樣。

如果我們發布前瞭解到目標 JVM 版本,知道怎麼從 java class 檔案中看出 major.minor 版本來,就不用等到伺服器報出異常才著手去解決,也就能預知到可能發生的問題。

其他時候遇到這個問題應具體解決,總之問題的根由是低版本的 JVM 無法載入高版本的 class 檔案造成的,找到高版本的 class 檔案處理一下就行了。

unsupported major.minor version 解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.