新版mac配置多版本JDK切換和maven套件

倾城月光淡如水發表於2024-07-10

新版mac配置多版本JDK和maven套件

新版本的macOS Sonoma系統配置多版本的JDK和Maven開發套件。有平時開發和學習用到的JDK是不同版本的需求,就直接安裝多個版本的JDK,使用的時候直接命令進行對應版本的切換,要做到切換JDK版本,可以自己配置並在終端切換,或者使用java的版本管理工具jenv。目前我用到的是自己配置,jenv還要自行去了解~~


安裝java

  1. mac安裝java的途徑就比較多了,直接下載對應機型和版本的dmg安裝檔案進行安裝、homebrew包管理器、mac是自帶git和python的,所以也可以克隆和curl之類的命令安裝
  2. 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可以檢視安裝了那些版本
下載jdk

~ /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
  1. 配置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

  1. 下載maven
    下載所需要的maven版本並解壓到合適的位置,一般是在個人資料夾內建立一個開發相關的資料夾,放在裡面 maven官方下載地址
  2. 配置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幾種配置檔案的區別

![jdk安裝路徑](https://img2024.cnblogs.com/blog/1150701/202407/1150701-20240710052655401-627560672.png)

相關文章