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

                  一直以來都是用jdk1.5,這次重返電信由于其系統(tǒng)是在jdk1.4上編譯的,編譯的時(shí)候出現(xiàn)了unsupported major.minor version49.0的錯(cuò)誤,上網(wǎng)查看了一下還是一個(gè)很普遍的錯(cuò)誤,搗鼓了兩天終于搗鼓出一些東西,現(xiàn)分享給大家。

               何謂 major.minor,且又居身于何處呢?先感性認(rèn)識并找到 major.minor 來。順便寫一段 代碼,然后用 JDK 1.5 的編譯器編譯成class,用UltraEdit或者其他能打開非十進(jìn)制文件的軟件打開此class,見下圖:        

           

                 從上圖中我們看出來了什么是 major.minor version 了,它相當(dāng)于一個(gè)軟件的主次版本號,只是在這里是標(biāo)識的一個(gè) Java Class 的主版本號和次版本號,同時(shí)我們看到 minor_version 為 0x0000,major_version 為 0x0031,轉(zhuǎn)換為十制數(shù)分別為0 和 49,即 major.minor 就是 49.0 了。

                現(xiàn)在不妨從 JDK 1.1 到 JDK 1.7 編譯器編譯出的 class 的默認(rèn) minor.major version 吧。(又走到 Sun 的網(wǎng)站上翻騰出我從來都沒用過的古董來)
               

          JDK 編譯器版本 target 參數(shù) 十六進(jìn)制 minor.major 十進(jìn)制 minor.major
          jdk1.1.8 不能帶 target 參數(shù) 00 03 00 2D 45.3
          jdk1.2.2 不帶(默認(rèn)為 -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 不帶(默認(rèn)為 -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 不帶(默認(rèn)為 -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 不帶(默認(rèn)為 -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 不帶(默認(rèn)為 -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 不帶(默認(rèn)為 -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 不帶(默認(rèn)為 -target 1.2) 00 00   00 2E 46.0
          Apache Harmony 5.0M3 -target 1.4 00 00   00 30 48.0

           

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

                  那么現(xiàn)在如果碰到這種問題該知道如何解決了吧,還會像我所見到有些兄弟那樣,去找個(gè) 1.4 的 JDK 下載安裝,然后用其重新編譯所有的代碼嗎?且不說這種方法的繁瑣,而且web應(yīng)用程序還不一定能成功,其實(shí)大可不必如此費(fèi)神,我們一定還記得 javac 還有個(gè) -target 參數(shù),對啦,可以繼續(xù)使用 1.5 JDK,編譯時(shí)帶上參數(shù) -target 1.4 -source 1.4 就 OK 啦,不過你一定要對哪些 API 是 1.5 JDK 加入進(jìn)來的了如指掌,不能你的 class 文件拿到 JVM 1.4 下就會 method not found。目標(biāo) JVM 是 1.3 的話,編譯選項(xiàng)就用 -target 1.3 -source 1.3 了。

                相應(yīng)的如果使用 ant ,它的 javac 任務(wù)也可對應(yīng)的選擇 target 和 source

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

          如果是在開發(fā)中,可以肯定的是現(xiàn)在真正算得上是 JAVA IDE 對于工程也都有編譯選項(xiàng)設(shè)置目標(biāo)代碼的。例如 Eclipse 的項(xiàng)目屬性中的 Java Compiler 設(shè)置,如圖:

                  

                  其實(shí)理解 major.minor 就像是我們可以這么想像,同樣是微軟件的程序,32 位的應(yīng)用程序不能拿到 16 位系統(tǒng)中執(zhí)行那樣。

          如果我們發(fā)布前了解到目標(biāo) JVM 版本,知道怎么從 java class 文件中看出 major.minor 版本來,就不用等到服務(wù)器報(bào)出異常才著手去解決,也就能預(yù)知到可能發(fā)生的問題。

          其他時(shí)候遇到這個(gè)問題應(yīng)具體解決,總之問題的根由是低版本的 JVM 無法加載高版本的 class 文件造成的,找到高版本的 class 文件處理一下就行了。

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 台江县| 天津市| 介休市| 门源| 天柱县| 襄汾县| 青岛市| 南阳市| 宜都市| 无棣县| 乳山市| 兴山县| 望奎县| 拉萨市| 阳山县| 巢湖市| 乌拉特前旗| 万载县| 高雄县| 洛宁县| 谢通门县| 南漳县| 博乐市| 苍南县| 白银市| 密山市| 云阳县| 景宁| 绍兴市| 方城县| 秭归县| 广州市| 柳州市| 广元市| 丹江口市| 全州县| 平顶山市| 临朐县| 永丰县| 怀安县| 集贤县|