使用 jEnv 管理多個 JDK 安裝
一、簡介
對於 Java 的每個新發布週期,我們可能需要在我們的環境中管理多個並行版本的軟件開發工具包 (SDK)。因此,設置和管理JAVA_HOME
路徑變量有時會變得非常痛苦。
在本教程中,我們將了解jEnv如何幫助管理多個不同版本的 JDK 安裝。
2.什麼是jEnv ?
jEnv 是一個命令行工具,可以幫助我們管理多個 JDK 安裝。它基本上在我們的 shell 中設置JAVA_HOME
,可以全局設置,本地設置到當前工作目錄,或每個 shell。
它讓我們可以在不同的 Java 版本之間快速切換。這在處理具有不同 Java 版本的多個應用程序時特別有用。
值得注意的是, jEnv 不會為我們安裝 Java JDK。相反,它只是幫助我們方便地管理多個 JDK 安裝。
此外,讓我們深入了解 jEnv 安裝並查看其最常用的命令。
3. 安裝jEnv
jEnv 支持 Linux 和 MacOS 操作系統。此外,它還支持 Bash 和 Zsh shell。讓我們從使用終端安裝它開始:
在 MacOS 上,我們可以簡單地使用Homebrew安裝 jEnv :
$ brew install jenv
在 Linux 上,我們可以從源代碼安裝 jEnv:
$ git clone https://github.com/jenv/jenv.git ~/.jenv
接下來,讓我們根據所使用的 shell 將已安裝的jenv
命令添加到路徑中。
為 Bash shell 添加 PATH 條目:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
為 Zsh shell 添加 PATH 條目:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
最後,為了驗證 jEnv 安裝,我們使用jenv doctor
命令。在 MacOS 上,該命令將顯示以下內容:
$ 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 : /opt/homebrew/Cellar/jenv/0.5.4/libexec/libexec:/Users/jenv/.jenv/shims:/Users/user/.jenv/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
[OK]
Jenv is correctly loaded
這表明jenv
已正確安裝和加載,但尚未安裝 Java。
此外,讓我們看一下如何安裝和管理多個 JDK 版本。
4. 管理 JDK 安裝
讓我們從設置 JDK 版本開始。我們可以使用可用的包管理器之一安裝 JDK,例如 brew、yum 或 apt。或者,我們也可以下載 JDK 並將其放在某個文件夾中。
jEnv 的好處是我們不需要通過包管理器安裝 JDK。我們可以簡單地下載一個 JDK 並將其放入某個文件夾中。
4.1.將 JDK 添加到 jEnv
首先,要將新的 JDK 與 jEnv 一起使用,我們需要告訴 jEnv 在哪裡找到它。為此,我們使用jenv add
命令並指定 JDK 的路徑:
$ jenv add /Library/Java/JavaVirtualMachines/openjdk-8.jdk/Contents/Home/
openjdk8-1.8.0.332 added
1.8.0.332 added
1.8 added
這會將 JDK 8 添加到 jEnv。每個版本都以三個不同的名稱提供。讓我們再次運行jenv doctor
來確認 JDK 設置:
$ jenv doctor
[OK]
No JAVA_HOME set
[OK]
Java binaries in path are jenv shims
[OK]
Jenv is correctly loaded
我們可以看到 jEnv 現在可以識別配置的 JDK。
此外,讓我們使用jenv versions
命令列出所有可用的 JDK 和 jEnv:
$ jenv versions
* system (set by /Users/user/.jenv/version)
1.8
1.8.0.332
openjdk64-1.8.0.332
這列出了使用 jEnv 註冊的所有 JDK。在我們的例子中,我們使用 jEnv 配置了 JDK 8。
為了演示使用多個 JDK,讓我們再安裝一個 JDK 版本 – 11 並使用 jEnv 配置它:
$ jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/
openjdk64-11.0.15 added
11.0.15 added
11.0 added
11 added
最後,現在運行jenv versions
命令將列出兩個已配置的 JDK 版本:
$ jenv versions
* system (set by /Users/avinb/.jenv/version)
1.8
1.8.0.332
11
11.0
11.0.15
openjdk64-11.0.15
openjdk64-1.8.0.332
顯然,我們現在有兩個 JDK 版本都配置了 jEnv。
4.2.使用 jEnv 管理 JDK 版本
jEnv 支持三種類型的 JDK 配置:
- 全局 - 如果我們在計算機上的任何位置的命令行中鍵入
java
命令,將使用 JDK。 - 本地 – 僅為特定文件夾配置的 JDK。在文件夾中鍵入 java 命令將使用本地 JDK 版本而不是全局 JDK 版本。
- Shell – 將僅用於當前 shell 實例的 JDK。
首先,讓我們檢查一下全局 JDK 的版本:
$ jenv global
system
該命令輸出“ system”
表示系統安裝的JDK將作為全局JDK使用。讓我們將全局 JDK 版本設置為 JDK 11:
$ jenv global 11
現在檢查全局版本將顯示 JDK 11:
$ jenv global
11
接下來,讓我們看看如何設置本地 JDK 版本。
例如,假設我們在~/baeldung-project
目錄中有一個使用 JDK 8 的示例項目。讓我們cd
進入該目錄並檢查該項目的本地 JDK 版本:
$ jenv local
jenv: no local version configured for this directory
此錯誤消息表示我們尚未為此目錄設置任何本地 JDK 版本。在沒有本地 JDK 版本的情況下運行jenv version
命令將顯示全局 JDK 版本。讓我們為這個目錄設置一個本地 JDK 版本:
$ jenv local 1.8
此命令在~/baeldung-project
目錄中設置本地 JDK。設置本地 JDK 基本上會在當前目錄中創建一個名為.java-version
的文件。該文件包含我們設置的本地 JDK 版本“ 1.8″
。
在此目錄中再次運行 jenv version 命令現在將輸出 JDK 8。讓我們檢查此目錄中設置的本地 JDK 版本:
$ jenv local
1.8
最後,要為特定的 shell 實例設置 JDK 版本,我們使用jenv shell
命令:
$ jenv local 1.8
這會為當前 shell 實例設置 JDK 版本,並覆蓋已設置的任何本地和全局 JDK 版本。
4.3.使用 Maven 和 Gradle 配置 jEnv
眾所周知,Maven、Gradle等工具都是使用系統JDK來運行的。它不使用 jEnv 配置的 JDK。為了確保 jEnv 與 Maven 和 Gradle 正常工作,我們必須啟用它們各自的插件。
對於 Maven,我們將啟用 jEnv maven
插件:
$ jenv enable-plugin maven
同樣,對於 Gradle,我們將啟用 jEnv gradle
插件:
$ jenv enable-plugin gradle
現在運行 Maven 和 Gradle 命令將使用特定於 jEnv 的 JDK 版本,而不是系統 JDK。
請注意,有時 jEnv 可能不會選擇正確的 JDK 版本,我們可能會以錯誤告終。對於這種情況,我們可能必須啟用 jEnv exports
插件:
$ jenv enable-plugin exports
換句話說,此插件將確保正確設置JAVA_HOME
變量。
此外,SDKMAN 是一種用於管理 JDK 的替代工具,以及其他工具。
5.結論
在本文中,我們首先了解了什麼是 jEnv 以及如何安裝它。
然後我們研究了 jEnv 如何幫助我們方便地配置和管理不同的 JDK 安裝。接下來,我們看到瞭如何使用 jEnv 快速使用全局、本地和特定於 shell 的 JDK 版本。這在處理具有不同 JDK 版本的多個不同項目時特別有幫助。
最後,我們研究瞭如何配置 jEnv 以與 Maven 和 Gradle 等構建工具一起工作。