如何在MacOS中管理多個(gè)Java版本

在這篇指南中,我們將完成使用jEnv命令行工具來管理MacOS系統(tǒng)中的三個(gè)JDK版本(Java8、Java11和Java17),大致流程為:

  1. 使用MacOS的包管理工具Homebrew安裝JDK環(huán)境變量管理工具jEnv
  2. 使用Homebrewan安裝多個(gè)JDK版本
  3. 將多個(gè)Java版本的路徑加入jEnv
  4. 通過jEnv命令設(shè)置全局、項(xiàng)目和shell的Java版本

所有涉及的工具清單如下:

  • Homebrew,Homebrew是一個(gè)免費(fèi)的MacOS包管理工具,我們用它來安裝JDK和JDK版本管理工具
  • jEnv,jEnv是一個(gè)讓你不需要記住如何設(shè)置JAVA_HOME環(huán)境變量的命令行工具,我們將用它來管理系統(tǒng)中的JDK版本

安裝步驟

安裝Homebrew

在MacOS上安裝Homebrew,可以參考MacOS包管理工具-Homebrew

安裝jEnv

brew install jenv

輸出:

Running `brew update --preinstall`...
==> Downloading https://ghcr.io/v2/homebrew/core/jenv/manifests/0.5.4
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/jenv/blobs/sha256:521a1ad6e28b90f1e37893d279950e35957a0580464d639ec74c3
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:521a1ad6e28b90f1e37893d279950e35957
######################################################################## 100.0%
==> Pouring jenv--0.5.4.all.bottle.tar.gz
==> Caveats
To activate jenv, add the following to your ~/.zshrc:
  export PATH="$HOME/.jenv/bin:$PATH"
  eval "$(jenv init -)"
==> Summary
??  /usr/local/Cellar/jenv/0.5.4: 84 files, 73KB
==> Running `brew cleanup jenv`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

按照輸出提示,我們需要將以下配置加入我們的shell配置文件中(如果系統(tǒng)使用的shell是bash,就將其加入~/.bash_profile或者~/.bashrc;如果使用的shell是zsh,就將其加入~/.zshrc文件中)。

export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

我們可以直接將上述配置直接粘貼到shell配置文件中,也可以通過echo將其加入配置文件中:

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc

不管通過哪種方式完成配置后,我們需要使配置立即生效:

source ~/.zshrc

jEnv已經(jīng)安裝配置完成,我們可以通過jenv doctor命令驗(yàn)證一下:

jenv doctor

輸出:

[OK]    No JAVA_HOME set
[ERROR] Java binary in path is not in the jenv shims.
[ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation.
    PATH : /usr/local/Cellar/jenv/0.5.4/libexec/libexec:/Users/username/.nvm/versions/node/v17.3.0/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands
[ERROR] Jenv is not loaded in your zsh
[ERROR] To fix :    echo eval "$(jenv init -)" >> /Users/username/.zshrc

假如看到類似上面錯(cuò)誤提示,暫且不用理會(huì),因?yàn)槲覀冞€沒將JDK添加到j(luò)Evn的管理中。如果我們在后續(xù)會(huì)使用到Maven還需要以下操作:

  • 啟用export插件
jenv enable-plugin export

輸出

You may restart your session to activate jenv export plugin echo export plugin activated
  • 啟用Maven插件
jenv enable-plugin maven

輸出

maven plugin activated

安裝Java

# 安裝最新版OpenJDK
$ brew install --cask temurin

# 安裝其他版本
$ brew tap homebrew/cask-versions
$ brew install --cask temurin11
$ brew install --cask temurin8

配置jEnv

把所有JDK加入jEnv管理

首先,查看系統(tǒng)中有哪些JDK版本:

/usr/libexec/java_home -V

輸出:

Matching Java Virtual Machines (4):
    17.0.2 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 17" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
    11.0.13 (x86_64) "Oracle Corporation" - "Java SE 11.0.13" /Library/Java/JavaVirtualMachines/jdk-11.0.13.jdk/Contents/Home
    1.8.202.08 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_202 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home

然后,將所有JDK的路徑加入到j(luò)Env中,語法如下:

jenv add <jdk_path>

例如:

jenv add /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home

查看下jEnv管理的所有JDK版本:

jenv versions

輸出:

 system
  1.8
  1.8.0.202
* 11 (set by /Users/username/.jenv/version)
  11.0
  11.0.13
  17
  17.0
  17.0.2
  openjdk64-17.0.2
  oracle64-1.8.0.202
  oracle64-11.0.13

設(shè)置全局JDK版本

jenv global 11

設(shè)置項(xiàng)目JDK版本

如果要為項(xiàng)目指定JDK版本,只需在項(xiàng)目根目錄下使用以下命令即可,jEnv會(huì)在目錄下生成.java-version文件來描述當(dāng)前項(xiàng)目使用的JDK版本

jenv local 1.8

設(shè)置shell的JDK版本

jenv shell 17

FAQ

jEnv啟用插件報(bào)錯(cuò)

問題信息

jenv: no such command `enable-plugin'

解決方案
重啟會(huì)話終端

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容