《mac爬坑记》文集说明
就如同文集的命名一样,笔者还是新手,故
- 本文集记载的所有内容,均是日记/笔记性质,面向的读者大概是未来对这些知识有所遗忘的自己吧(笑),有些我个人不熟悉的内容可能会过度展开,如果有别的读者看到已经熟知的内容,或是过于琐碎的口吻,请务必不要介意,跳过就好了
- 文中记录的问题和解决方案均没有在多个终端测试过,不能保证解决方案的准确性,请务必理解思路和本质
- 为了解决问题查找并参考的所有资料均附在末尾
- 若有错漏之处,欢迎各位指正
问题(背景)概述
先前macbook一直使用的是jdk13,得知其并不是长期支持的版本后,安装了jdk11,因此有了修改java路径的需求
解决过程
查看目前安装的jdk路径
要想设置路径首先需要得知目前jdk的安装路径,oracle官网发布的.dmg安装包并未显示默认安装路径,需要查看jdk路径的方法:
在终端 Terminal 输入以下命令即可查看(见参考文献)
/usr/libexec/java_home -V
以下是输出结果
Matching Java Virtual Machines (2):
13.0.1, x86_64: "Java SE 13.0.1" /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home
11.0.7, x86_64: "Java SE 11.0.7" /Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home
可以看到目前默认的是jdk13,而需要的jdk11路径为/Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home
添加/更改环境变量
方案A,修改每次启动都会自动加载的系统级别的/etc/profile,在这个文件中添加/更改路径
方案B,修改/创建用户级别的~/.bash_profile,在这个文件中添加/更改路径,并修改/创建终端打开时会载入的~/.zshrc,在后者中添加运行前者的命令,达到每次打开终端,路径便被修改成jdk11的目的
截止2020年7月8日本文第一次发布,查找到的绝大部分资料都是方案A,虽然笔者实在是不太敢动系统级别的文件,但还是最终进行了尝试,然而并没有解决问题,推测是权限方面的问题,于是在老师的提点下转战方案B,以下是一些细节
- 笔者的终端 Terminal 设置中,默认打开的是
zsh,如果是bash或其他的shell解释器,那么前面方案B中提到的终端自动载入设置文件应为~/.bashrc或其他(详见参考文献) - 笔者在一开始动手的时候,
~/.bash_profile和~/.zshrc都未被创建过,提示是新文件,这个修改完后保存创建就好了,不要怕 - 通过
vim将前面获得的jdk11的路径添加进~/.bash_profile,内容如下(原理详见参考文献),注意添加进PATH的不是$JAVA_HOME而是$JAVA_HOME/bin
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
- 通过
vim将使~/.bash_profile生效的命令添加进~/.zshrc,内容如下
source ~/.bash_profile
终端运行结果
<给我的mac主机名打个码> % java --version
java 11.0.7 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode)
运行java --version后显示结果如上,成功调用jdk11(默认的依旧是jdk13,但是在zsh运行java会调用jdk11)