使用jEnv管理多個JDK安裝 - reflectoring

banq發表於2020-11-01

jEnv是一個方便的工具,可以在不同專案之間管理多個JDK版本。
作為開發人員,我們經常同時在不同的程式碼庫上工作。尤其是在具有微服務的環境中,我們可能一天要多次切換程式碼庫。
在每兩年釋出一次新Java版本的日子裡,這通常不是問題,因為大多數程式碼庫都需要相同的Java版本。
當Java發行節奏每6個月更改一次時,這種情況就會改變。今天,如果我們正在使用多個程式碼庫,則每個程式碼庫都有可能使用不同的Java版本。
jEnv是一個工具,可以幫助我們管理多個JDK安裝並配置每個程式碼庫以使用特定的JDK版本,而無需更改JAVA_HOME環境變數。
 

安裝jEnv
jEnv支援Linux和MacOS作業系統。如果您使用的是Windows,則需要安裝LinuxWindows子系統(或bash模擬器,如GitBash)才能使用它。
按照jEnv主頁上的安裝說明安裝jEnv。
 

安裝JDK
如果您正在閱讀本文,則很可能要為正在使用的程式碼庫設定新的JDK。讓我們從AdoptOpenJDK網站下載JDK 。
選擇所需的版本並下載。將.tar.gz檔案解壓縮到任意位置。
關於jEnv的好處是,我們不需要透過brew,yum或apt之類的軟體包管理器來安裝JDK。我們只需要下載一個JDK並將其放入某個資料夾中即可。
您仍然可以使用brew,yum或apt來安裝JDK,您只需要查詢包管理器之後放置JDK的資料夾即可。
 

將JDK新增到jEnv
要將新的JDK與jEnv一起使用,我們需要告訴jEnv在哪裡找到它。首先,使用jenv versions命令檢查jEnv已經支援哪些JDK 。
就我而言,我已經安裝了JDK 11、13和14。每個版本都有三種不同的名稱。
假設我們已經下載了JDK 15並將其提取到該資料夾​​中~/software/java/jdk-15+36。
現在,我們將新的JDK新增到jEnv中:

jenv add /home/tom/software/java/jdk-15+36/


如果再次執行jenv versions,將發現:在JDK 15已名下加15和openjdk64-15。

 

本地與全域性JDK
jEnv支援全域性JDK和多個本地JDK的概念。
全域性JDK是在java計算機上任何地方鍵入命令列時都將使用的JDK 。
本地JDK是僅為特定資料夾配置的JDK。如果我們java在此資料夾中輸入命令列,它將不使用全域性JDK,而是使用本地JDK。
我們可以使用它為不同的專案配置不同的JDK(只要它們位於不同的資料夾中)。

  • 設定全域性JDK

首先,我們檢查全域性JDK的版本:

jenv global

在我的情況下,輸出為:

system

這意味著系統安裝的JDK將用作全域性JDK。該名稱system不是很有幫助,因為它沒有說明它是哪個版本。讓我們將全域性JDK更改為具有版本號的更有意義的JDK:

jenv global 11

此命令已將全域性使用的JDK版本更改為11。就我而言,該版本與以前相同,但是如果鍵入jenv global,我現在將看到哪個JDK版本是我的全域性版本。
  • 設定本地JDK

還記得我們下載的JDK 15嗎?下載它的原因可能是我們正在開發一個需要執行JDK 15的新專案。
假設該專案位於資料夾中~/shiny-project。讓我們cd進入這個資料夾。
如果現在輸入java -version,將得到以下結果:

openjdk version "11.0.8" 2020-07-14


這是因為JDK 11是我的全域性JDK。
讓我們將此專案更改為JDK 15:

jenv local 15

現在再次鍵入java -version,輸出將是:

openjdk version "15" 2020-09-15

這是如何運作的?
使用該jenv local命令後,您將.java-version在當前資料夾中找到一個名為的檔案。該檔案包含本地JDK的版本號。
在安裝過程中,jEnv會覆蓋該java命令。每次我們java現在呼叫時,jEnv都會查詢一個.java-version檔案,如果找到一個檔案,則將啟動該檔案中定義的JDK版本。如果找不到.java-version檔案,則會啟動全域性配置的JDK。
 

使用Maven和Gradle
因此,如果我們java透過命令列呼叫,它將立即選擇一個本地配置的JDK。大!
但是,諸如Maven或Gradle之類的工具仍然使用JDK的系統版本!
讓我們來看看我們能做些什麼。

  • 配置jEnv以與Maven一起使用

使Maven與jEnv定義的本地JDK一起使用很容易。我們只需要安裝maven外掛:

jenv enable-plugin maven

如果現在在~/shiny-project資料夾中執行mvn -version,將獲得以下輸出:

Maven home: .../apache-maven-3.6.3
Java version: 15, vendor: AdoptOpenJDK, runtime: /home/tom/software/java/jdk-15+36
Default locale: en_AU, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-52-generic", arch: "amd64", family: "unix"

  • 配置jEnv以使用Gradle

就我而言,Gradle自動選擇了jEnv本地配置的JDK!
如果您無法立即使用它,則可以類似於上述Maven外掛那樣安裝gradle外掛:

jenv enable-plugin gradle

如果現在在~/shiny-project資料夾中執行gradle -version,將獲得安裝結果。

 

相關文章