想升级一下 jdk,结果一下子就陷进去了,记录一下当时是如何解决的
假定我们是使用 brew 安装 jdk17,如果使用 brew info jdk
或是 brew info java
,
都会将我们指向到 openjdk: stable 17.0.1。
openjdk 是安装在 /usr/local/opt/openjdk
,但是为了能让系统可以正确识别,我们需要
设一个 symbol link,而且这个软连接并不是指向 jdk 的根目录,而是指向 /usr/local/opt/openjdk/libexec/openjdk.jdk
,
这个命令非常重要,虽然 brew 有在 Caveats 写明, 即使可能不需要执行,也不要漏看这一条。
为了确保不必要的麻烦,我们还是设一下软连接:
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
打开 settings.json,与 jdk 相关的配置如下:
// sonar lint 需要 java home
"sonarlint.ls.javaHome": "/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home",
// 目前还是需要,后续可能会用 JAVA_HOME 替换
"java.home": "/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home",
"java.debug.settings.console": "internalConsole",
// 终端的 JAVA_HOME
"terminal.integrated.env.osx": {
"JAVA_HOME": "/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home"
},
"java.configuration.runtimes": [
{
"name": "JavaSE-1.8",
"path": "/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home",
"default": true
},
// 新增 java 17 运行时
{
"name": "JavaSE-17",
"path": "/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home",
}
],
这时 vscode 和我们的项目应该就可以正确识别和使用 jdk 17 了,我们可以从 spring initializr 生一个项目试一下,这里就不赘述了,如果是已经存在的老项目, 可能需要执行一下 Clean Java Language Server Workspace。
很简单对不对,但是我卡了很久,主要原因就是我以为 jdk 装到哪里,哪里就是 java home,
但其实不对,虽然 vscode 不会报错,但是编译项目的时候一直有问题,后来我注意到 brew 的
caveats,设了软连接,然而 /Library/Java/JavaVirtualMachines/openjdk.jdk
依然不是
java home,还要加上 /Contents/Home
,这个是我按照原先 JavaSE-1.8 推测的。
那么现在我推测,如果把 java home 都配置成 /usr/local/opt/openjdk/libexec/openjdk.jdk/Contents/Home
,
可能软连接也是多余的了,这个留给你来测试吧,我已经不想再折腾了。