新版mac配置多版本JDK和maven套件
新版本的macOS Sonoma系统配置多版本的JDK和Maven开发套件。有平时开发和学习用到的JDK是不同版本的需求,就直接安装多个版本的JDK,使用的时候直接命令进行对应版本的切换,要做到切换JDK版本,可以自己配置并在终端切换,或者使用java的版本管理工具jenv。目前我用到的是自己配置,jenv还要自行去了解~~
安装java
- mac安装java的途径就比较多了,直接下载对应机型和版本的dmg安装文件进行安装、homebrew包管理器、mac是自带git和python的,所以也可以克隆和curl之类的命令安装
- jdk下载地址
- oracle官网,现在下载jdk1.8是需要登陆的,高版本17、21、22不需要刻意直接下oracle官网
- WEJDK学习站,各种版本的jdk整合WEJDK学习站
- 企业平台zulu企业平台、adoptium企业平台
根据需求去下载对应版本的jdk,如果没有强制要求一般是openjdk,不用oracle版本的不用去担心收费问题
这里是下载了dmg文件安装了jdk8和17,mac安装java的路径是固定位置/Library/Java/JavaVirtualMachines/
,使用访达>>前往文件夹输入这个路径就可以找到,同时在终端输入/usr/libexec/java_home -V
可以查看安装了那些版本
~ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):17.0.9 (arm64) "Oracle Corporation" - "Java SE 17.0.9" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home1.8.381.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home1.8.0_381 (arm64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
- 配置java环境
新版的macOS Sonoma用的终端都是zsh shell,而不是bash shell,所以配置文件就只要配置.zshrc
文件就可以了,不用再去额外创建.bash_profile
,他既然更新了就用新功能呗,肯定是新的更好用吧,当然继续沿用之前创建bash_profile也是没问题的
本机macOS 14.5,从macOS Catalina(10.15) 开始,macOS的默认终端从bash变成了zsh,
我们常说的环境变量修改有两种方式,分为系统级别(对所有用户生效)和用户级别(对当前用户生效),像/etc/profile这种在/etc目录下的配置则都属于全局配置,~/则属于用户级别的,当然 macOS 也不是服务器,一般就自己一个人用,也不用分得太清楚
环境变量的加载顺序依次从上向下查找,比较详细的mac介绍可以参考macOS 环境变量加载探究、几种配置文件的区别
$/etc/profile
$/etc/paths
$ ~/.bash_profile
$ ~/.bash_login
$ ~/.profile
$ ~/.zshrc
配置文件
#jdk安装路径
export JAVA_HOME_17=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
export JAVA_HOME_8=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
# 通过查询变量配置路径
# export JAVA_HOME_17=`/usr/libexec/java_home -v 17`
# export JAVA_HOME_8=`/usr/libexec/java_home -v 1.8.0_381`export MAVEN_HOME=/opt/homebrew/Cellar/maven/3.9.6
export JAVA_HOME=$JAVA_HOME_17
export PATH=$PATH:$JAVA_HOME/bin# 给上面的变量一个别名
alias jdk17="export JAVA_HOME=$JAVA_HOME_17"
alias jdk8="export JAVA_HOME=$JAVA_HOME_8"
export PATH=$PATH:$MAVEN_HOME/bin# 配置文件格式如下
# export 自定义环境变量名1 = 路径1
# export 自定义环境变量名2 = 路径2
# 自定义环境变量名3 = 路径3
# export 自定义环境变量名3# export PATH=$PATH:$自定义环境变量名1:$自定义环境变量名2
# export PATH=$PATH:路径3
# 按 esc 退出编辑模式,输入 :wq 保存并退出vim
# 注意一下:多个变量用英文冒号:隔开,$PATH要添加回去PATH中,否则系统内部原有命令失效。# vim常用的命令:
# vim [filename.ext]
# # 输入 i 回车进入编辑模式
# # 编辑内容...
# 按 esc 键退出编辑模式,然后输入以下带冒号:的命令
# :wq 保存后退出vi,若为 :wq! 则为强制储存后退出(常用)
# :w 保存但不退出(常用)
# :w! 若文件属性为『只读』时,强制写入该档案
# :q 离开 vi (常用)
# :q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
在.zshrc
中配置完成后在终端输入source .zshrc
使配置生效,如果是使用创建.bash_profile
方式配置则需要在.zshrc
配置文件中追加source ~/.bash_profile
命令即可在关闭终端或重启电脑时也能正常生效,意为在启动终端时也加载一下bash_profile文件下的配置。使用java -version
进行验证,我配置的别名命令是jdk8、jdk17
进行jdk的切换,能正确输出版本信息则配置成功。
这里要注意下,在上面配置文件中,export JAVA_HOME=$JAVA_HOME_17一定要指定一个默认版本,不然会影响到maven,在使用maven时会提示
The JAVA_HOME environment variable is not defined correctly
this environment variable is needed to run this program.
➜ ~ mvn -version
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.
➜ ~
export PATH=$PATH:$JAVA_HOME/bin其中$PATH一定要在前面追加,否则会导致版本无法切换成功,这个其实就是一个环境变量的优先级和覆盖问题,在windows机器上也会出现,配置了正确的java系统环境变量但是版本信息不对,一般的解决办法是在PATH中把java的路径放在最前面,这样在加载时优先加载就可以解决,至少我之前的习惯是这样,而且也没出现过问题,以下是错误复现,可以看到在切换为jdk8后输出的信息依然是17.0.9
➜ ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):17.0.9 (arm64) "Oracle Corporation" - "Java SE 17.0.9" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home1.8.381.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home1.8.0_381 (arm64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
➜ ~ java -version
java version "17.0.9" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing)
➜ ~ jdk8
➜ ~ java -version
java version "17.0.9" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing)
➜ ~
在终端输入source .zshrc
使配置生效之后关闭终端重新打开
。输入切换命令,正确输出信息即为配置成功
➜ ~ java -version
java version "17.0.9" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing)
➜ ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):17.0.9 (arm64) "Oracle Corporation" - "Java SE 17.0.9" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home1.8.381.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home1.8.0_381 (arm64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
➜ ~ jdk8
➜ ~ java -version
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)
➜ ~ jdk17
➜ ~ java -version
java version "17.0.9" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing)
➜ ~
安装maven
- 下载maven
下载所需要的maven版本并解压到合适的位置,一般是在个人文件夹内创建一个开发相关的文件夹,放在里面 maven官方下载地址 - 配置maven
maven要配置的内容除了环境变量还有setting文件,根据个人喜好和需求配置setting中的本地仓库<localRepository>
、镜像节点<mirror>
和私服信息<server>
maven环境变量
export MAVEN_HOME=/opt/homebrew/Cellar/maven/3.9.6
export PATH=$PATH:$MAVEN_HOME/bin
setting配置
<localRepository>/Users/username/repo</localRepository>
##阿里云仓库
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>
<servers><server><id>nexus-releases</id><username>your-username</username><password>your-password</password></server><server><id>nexus-snapshots</id><username>your-username</username><password>your-password</password></server></servers>
配置完成后进行验证,在终端输入mvn -v
命令,显示版本信息即为正确,可能遇到的错误The JAVA_HOME environment variable is not defined correctly,在上面jdk配置默认的版本即可解决export JAVA_HOME=$JAVA_HOME_17
➜ ~ mvn -v
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /opt/homebrew/Cellar/maven/3.9.6/libexec
Java version: 17.0.9, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "14.5", arch: "aarch64", family: "mac"
➜ ~ java -version
java version "17.0.9" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing)
➜ ~ jdk8
➜ ~ mvn -v
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /opt/homebrew/Cellar/maven/3.9.6/libexec
Java version: 1.8.0_381, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "14.5", arch: "aarch64", family: "mac"
➜ ~ java -version
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)
➜ ~
参考资料:
macOS 环境变量加载探究
/etc/profile、etc/paths、~/.profile几种配置文件的区别