解決Unsupported major.minor version 51.0問題的感悟

今天偶然間同事遇到一個問題,也加深了自己對eclipse中build path和java compiler compliance level的理解。

問題是這樣的,同事在eclipse中開發的項目,導成jar之後,放到服務器上,總是報“Unsupported major.minor version 51.0”的錯誤,從網上查,一直說是JDK的問題,但是就不是很清楚怎麼回事,怎麼解決,最後,經過另一個同事,終於解決了,也使我終於明白了問題的來龍去脈:在eclipse中開發的項目有個java build path中可以配置的jdk,還有個java compiler中可以配置compiler level,這兩個是有區別的,build path的JDK版本是你開發的時候編譯器需要使用到的,就是你在eclipse中開發代碼,給你提示報錯的,編譯的過程;java compiler compliance level中配置的編譯版本號,這個編譯版本號的作用是,你這個項目將來開發完畢之後,要放到服務器上運行,那個服務器上JDK的運行版本。同事的問題就是,build path中配置1.7的JDK,java compiler compliance level中配置的1.7,但是服務器上是1.6的JDK,就報了那個錯誤,說是編譯所用的jdk(1.7)比運行所用的jdk(1.6)高了,這是錯誤的。
總結:build path的JDK版本是你開發的時候編譯器需要使用到的,例如,如果用的JDK1.4就不能使用泛型。而java compiler compliance level設置的是你寫好的JAVA代碼按照什麼JDK版本級別編譯,例如:設置的是1.4,編譯出來的class文件可以在1.4以上的JRE上運行,如果用的是5.0級別編譯,就不能運行在1.4的環境裏面,會提示版本過高。

補充:後經實例證明,在eclipse中進行開發的時候,build path 中JDK進行類庫的編譯(就是你使用類在不在這個JDK中),java compiler compliance level是對這個項目語法的編譯(就是你的項目中語法的正確與否),在開發的過程中,這兩個地方是都起作用的。所以說,最最安全的做法,是build path 和 java complier compliance level和服務器配置的JDK都保持一致,就不會出現任何問題的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章