1. 程式人生 > 其它 >記Mac系統下JD-GUI開啟,提示jdk版本需要1.8+的問題

記Mac系統下JD-GUI開啟,提示jdk版本需要1.8+的問題

在Mac系統下JD-GUI開啟報錯,提示如下

看報錯資訊提示是本地的jdk版本過低,需要升級。在終端輸入"java -version"

版本在1.8以上,應該是沒問題的。然後在查下jd-gui的指令碼:

#
# find installed Java versions
#################################

# first check system variable "$JAVA_HOME"
if [ -n "$JAVA_HOME" ] ; then
    JAVACMD="$JAVA_HOME/bin/java"
    
# check for specified JVMversion in
"/usr/libexec/java_home" symlinks elif [ ! -z ${JVMVersion} ] && [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then if /usr/libexec/java_home -F -v ${JVMVersion}; then JAVACMD="`/usr/libexec/java_home -F -v ${JVMVersion} 2> /dev/null`/bin/java" else # display error message with applescript osascript
-e "tell application \"System Events\" to display dialog \"ERROR launching '${CFBundleName}'\n\nNo suitable Java version found on your system!\nThis program requires Java ${JVMVersion}\nMake sure you install the required Java version.\" with title \"${CFBundleName}\" buttons {\" OK \"} default button 1 with icon path to resource \"${CFBundleIconFile}\" in bundle (path to me)
" # exit with error exit 3 fi # otherwise check "/usr/libexec/java_home" symlinks elif [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then JAVACMD="`/usr/libexec/java_home 2> /dev/null`/bin/java" # otherwise check Java standard symlink (old Apple Java) elif [ -h /Library/Java/Home ]; then JAVACMD="/Library/Java/Home/bin/java" # fallback: public JRE plugin (Oracle Java) else JAVACMD="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" fi

可以看到這裡獲取JAVACMD的過程,估計就是這裡取的時候出問題了。在終端輸入"echo $JAVA_HOME",結果也是正常的1.8(程式為空估計跟zsh終端有關),但是通過執行命令"/usr/libexec/java_home"得到的是jdk17的版本。

不知道是不是由於我的jdk安裝在個人使用者目錄導致的,最後試了很多方法都沒辦法讓/usr/libexec/java_home和JAVA_HOME保持一致,最後沒辦只能粗暴地改指令碼把獲取JAVACMD的邏輯都註釋,強行設定為1.8的路徑,問題算是半解決了。。。

#
# find installed Java versions
#################################

JAVACMD="/Users/zhugr/Library/Java/JavaVirtualMachines/adopt-openjdk-1.8.0_292/Contents/Home/bin/java"

# first check system variable "$JAVA_HOME"
# if [ -n "$JAVA_HOME" ] ; then
#     JAVACMD="$JAVA_HOME/bin/java"
    
# # check for specified JVMversion in "/usr/libexec/java_home" symlinks
# elif [ ! -z ${JVMVersion} ] && [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then

#     if /usr/libexec/java_home -F -v ${JVMVersion}; then
#         JAVACMD="`/usr/libexec/java_home -F -v ${JVMVersion} 2> /dev/null`/bin/java"
#     else
#         # display error message with applescript
#         osascript -e "tell application \"System Events\" to display dialog \"ERROR launching '${CFBundleName}'\n\nNo suitable Java version found on your system!\nThis program requires Java ${JVMVersion}\nMake sure you install the required Java version.\" with title \"${CFBundleName}\" buttons {\" OK \"} default button 1 with icon path to resource \"${CFBundleIconFile}\" in bundle (path to me)"
#         # exit with error
#         exit 3
#     fi

# # otherwise check "/usr/libexec/java_home" symlinks
# elif [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then
#     JAVACMD="`/usr/libexec/java_home 2> /dev/null`/bin/java"

# # otherwise check Java standard symlink (old Apple Java)
# elif [ -h /Library/Java/Home ]; then
#     JAVACMD="/Library/Java/Home/bin/java"

# # fallback: public JRE plugin (Oracle Java)
# else
#     JAVACMD="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"
# fi

# fallback fallback: /usr/bin/java
# but this would prompt to install deprecated Apple Java 6

先記錄下來,以後漲見識了再研究下

Ps:最開始的指令碼獲取JAVA_HOME的時候沒有獲取到,而通過終端能正常輸出,我猜是跟shell的命令列解析終端有關,因為指令碼預設是"#!/bin/sh",即通過sh終端解析,而mac預設的是zsh終端,所以獲取的JAVA_HOME為空。然而我把"#!/bin/sh"改為"#!/bin/zsh"也沒用,但是我直接把指令碼拖進終端執行倒是可以正常開啟,搞不懂。。。