posts - 7,comments - 5,trackbacks - 0
          unsupported major.minor version 解決方法

                  一直以來都是用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 文件處理一下就行了。

          posted on 2009-04-23 11:31 心路 閱讀(68608) 評論(5)  編輯  收藏

          FeedBack:
          # re: unsupported major.minor version 解決方法
          2013-04-02 17:18 |
          學習而來  回復  更多評論
            
          # re: unsupported major.minor version 解決方法
          2013-04-03 16:31 | 若宸
          原來是eclipse使用的編譯器版本與使用的jdk版本不一致,修改下編譯器版本就好了。  回復  更多評論
            
          # re: unsupported major.minor version 解決方法
          2014-11-26 09:24 | 夢飛
          頂下,好文章,解決了我的問題  回復  更多評論
            
          # re: unsupported major.minor version 解決方法
          2014-12-02 13:47 | 夏幻
          好文章!解決了我的問題!  回復  更多評論
            
          # re: unsupported major.minor version 解決方法
          2015-01-22 15:55 | lyj
          MyEclipse可以用嗎,我的也出現了這個問題java.lang.UnsupportedClassVersionError: com/hp/hpl/jena/datatypes/RDFDatatype : Unsupported major.minor version 51.0  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 绥中县| 伊通| 新巴尔虎左旗| 利川市| 岢岚县| 会昌县| 上饶市| 纳雍县| 嘉鱼县| 遂平县| 阿拉善左旗| 双辽市| 读书| 巴东县| 正蓝旗| 眉山市| 都昌县| 思南县| 井陉县| 灵石县| 当阳市| 门源| 广丰县| 元谋县| 井陉县| 潞城市| 漳浦县| 廉江市| 德钦县| 共和县| 焉耆| 增城市| 云安县| 松潘县| 南江县| 通许县| 蚌埠市| 宣城市| 昔阳县| 皋兰县| 舞阳县|