新版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/Home
1.8.381.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.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/Home
1.8.381.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.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/Home
1.8.381.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.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幾種配置檔案的區別