mac中下了个jd gui,一直启动不成功。提示的信息是:“No suitable Java version found on your system!
This program requires Java 1.8+
Make sure you install the required Java version.”
在命令行中输入: java -version 输出:
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
不确认1.8+ 包含不包含1.8,于是需要升级一下jdk版本了。
我没有选择安装包的方式,直接选择了“macos-x64_bin.tar.gz (sha256)” 方式。下载地址见下:
具体的安装方式如下:
#在下载路径中,解压文件
tar -zxf jdk-20_macos-x64_bin.tar.gz
#将解压文件移动到目标目录中。目标路径默认就存在的,无需其他的操作。
sudo mv jdk-20.0.2.jdk /Library/Java/JavaVirtualMachines/
# 我使用下面的命令,将之前的版本删除了。
# rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk
# 查看版本信息
java -verision
升级完jdk版本后,再次重新启动jd gui ,仍就报上面的错误。此时我猜测是由于JAVA_HOME,jd gui 无法获取到导致的。那么需要排查下 JAVA_HOME
echo $JAVA_HOME
的时候,结果输出为空.
原因分析:是由于没有将JAVA_HOME配置到环境变量中,于是使用命令
cat ~/.bash_profile
发现JAVA_HOME存在.bash_profile中。为什么没有生效那。执行
source ~/.base_profile
后, 在当前窗口是生效的。可我重新启动了一个terminal 执行 echo $JAVA_HOME 仍输出空行。很显然.bash_profile并没有命令行启动的时候,进行加载。于是我尝试将JAVA_HOME添加到 /etc/profile中。结果仍是不生效。
export JAVA_HOME=$(/usr/libexec/java_home)
此时我开始困惑了,/etc/profile 也没有加载。于是乎,我隐隐约约的执行了
echo $SHELL
结果输出的是
/bin/zsh
也就意味着,mac 的shell是zsh,不是bash. 于是我将
export JAVA_HOME=$(/usr/libexec/java_home)
添加到了 /etc/zprofile中, 再次重启一个新终端,echo $JAVA_HOME 果然成功了。此时欣喜若狂,点击了下jd gui 的图标。结果仍报开始的错误。此时我就有点懵了。
于是开启我的分析步骤:
进入 /Applications/JD-GUI.app/Contents/MacOS/ 路径下,查看”universalJavaApplicationStub.sh” 脚本。其中保存的内容:
# 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
上面的shell脚本中,清楚的看到开始校验 $JAVA_HOME就失效了。于是我看到jd-gui-1.6.6-min.jar了。
Contents
MacOS
universalJavaApplicationStub.sh
Resources
Java
jd-gui-1.6.6-min.jar
jd-gui.cfg
jd-gui.icns
Info.plist
于是我进入了 jd-gui-1.6.6-min.jar 执行
java -jar jd-gui-1.6.6-min.jar
成功启动.jd gui 启动解决。也就不与他的启动脚本较劲了。有兴趣的朋友,可自行解决。