閱讀549 返回首頁    go 阿裏雲 go 技術社區[雲棲]


jdk版本衝突Unsupported major.minor version錯誤定位

jdk版本衝突會提示如Unsupported major.minor version 52.0這種錯誤,不同的jdk版本會有對應的數字提示,52.0對應jdk1.8,51對應jdk1.7,以此類推。
這個錯誤主要產生的原因有兩類:
1. 一類是使用了高版本的jdk語法寫的代碼,使用低版本來編譯;
2. 使用maven、ant這類編譯工具的版本較低,環境中設置的jdk版本過高;

舉個之前遇到過的例子

背景說明:

使用ant進行編譯,ant腳本配置的jdk版本為1.6,用戶環境變量為jdk1.6
代碼編譯報錯:Unsupported major.minor version 52.0

定位步驟:

  1. 檢查jdk環境變量,發現版本正常

    deploy@VM000002002 ~ $ java -version
    java version "1.6.0_45"
    Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
    Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
    
  2. 檢查ant腳本配置,發現配置的也是jdk1.6,沒問題,繼續跟蹤

  3. 檢查ant工具依賴的jdk配置,因為前麵的步驟都正常,我分析很可能是工具依賴的jdk與配置的jdk不是同一版本

    JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
    

    到了這裏,發現配置直接依賴的$JAVA_HOME,順手一個

    deploy@VM000002002 ~ $ vim /etc/profile
    
    export JAVA_HOME=/usr/local/jdk1.8
    export PATH=$JAVA_HOME/bin:$PATH
    

    果然如此,居然是一個新安裝的jdk1.8被配置到全局環境變量裏了,接下來去用戶環境變量裏做一下驗證

    deploy@VM000002002 ~ $ vim .bash_profile
    # .bash_profile
    export JAVA_HOME=${HOME}/support/jdk
    

    到此原因找到,ant編譯依賴的jdk指向了全局的係統變量jdk1.8,但是ant本身的版本較低,無法支持這個高版本的jdk。

最後更新:2017-07-15 20:34:07

  上一篇:go  EL語句中session及sessionScope的選取問題
  下一篇:go  雙向同步助力企業快速複製異地多活