在開發的過程當中,避免不了多個項目使用的JDK環境不一致。如何在本機安裝多個JDK環境,並能作到隨時進行切換呢?javascript
安裝的過程當中,咱們使用brew
,其官方地址以下:https://brew.sh/。第一次安裝後,版本是最新的,但在之後的使用中,可能brew
的版本就過時了。咱們要保證在使用時其版本是最新的,因此每次使用前先執行如下命令以完成升級操做。java
brew update
正式的使用brew
前咱們先簡單瞭解一下它。brew
能爲咱們簡化在macos
或liunx
中的軟件安裝過程,至關於macos
系統下的包管理器。咱們知道在MACOS系統的軟件大致爲兩種:一種是命令行式的命令好比curl
,咱們使用brew install curl
來安裝。大家敲擊一個命令會完成一些操做,它只能在sheel
中使用;另外一種則是應用程序,相對來說比較大,好比XAMPP
,咱們則使用brew cask install XAMPP
來安裝;git
在brew
中,對這兩種軟件進行了分類,小的叫作formulae
,大的叫作cask
。咱們能夠在官網中找到其身影。github
地址爲:https://formulae.brew.sh/shell
執行brew search java
,咱們發現其對應如下列表。macos
panjiedeMacBook-Pro:~ panjie$ brew search java ==> Formulae app-engine-java javarepl libreadline-java google-java-format jslint4java ==> Casks eclipse-java netbeans-java-se eclipse-javascript oracle-jdk-javadoc java yourkit-java-profiler netbeans-java-ee homebrew/cask-versions/java-beta
在此,咱們想更多的瞭解Casks
中的java
, 則執行brew cask info java
segmentfault
panjiedeMacBook-Pro:~ panjie$ brew cask info java java: 12.0.2,10:e482c34c86bd4bf8b56c0b35558996b9 https://openjdk.java.net/ Not installed From: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/java.rb ==> Name OpenJDK Java Development Kit ==> Artifacts jdk-12.0.2.jdk -> /Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk (Generic Artifact)
咱們經過以上信息獲得:該cask
對應的是openjdk-12.0.0
,若是咱們計劃安裝它的話,則使用brew cask install java
來進行安裝。bash
除了直接查找java
關鍵字外,咱們還能夠查找jdk
關鍵字 -> brew serarch jdk
oracle
panjiedeMacBook-Pro:~ panjie$ brew search jdk ==> Casks adoptopenjdk ✔ adoptopenjdk12-openj9-jre-large adoptopenjdk10 adoptopenjdk12-openj9-large adoptopenjdk11 adoptopenjdk8 ✔ adoptopenjdk11-jre adoptopenjdk8-jre adoptopenjdk11-openj9 adoptopenjdk8-openj9 adoptopenjdk11-openj9-jre adoptopenjdk8-openj9-jre adoptopenjdk11-openj9-jre-large adoptopenjdk8-openj9-jre-large adoptopenjdk11-openj9-large adoptopenjdk8-openj9-large adoptopenjdk12 adoptopenjdk9 adoptopenjdk12-jre oracle-jdk adoptopenjdk12-openj9 oracle-jdk-javadoc adoptopenjdk12-openj9-jre sapmachine-jdk
若是你獲取的列表中沒有adoptopenjdk10
等,請執行brew cask info adoptopenjdk
再按提示執行brew tap adoptopenjdk/openjdk
。我猜想緣由是這樣:brew
只收錄了adoptopenjdk
最後的版本,一些過時的版本,交由adoptopenjdk
本身管理。而brew tap adoptopenjdk/openjdk
,則是拉取adoptopenjdk
自管理包的信息。
在此,咱們安裝兩個版本adoptopenjdk12
及adoptopenjdk8
app
brew cask install adoptopenjdk brew cask install adoptopenjdk8
不一樣版本的JDK安裝好了,如何能作到自由切換呢?首先,咱們使用 /usr/libexec/java_home -V
來查看版本安裝信息
panjiedeMacBook-Pro:~ panjie$ /usr/libexec/java_home -V Matching Java Virtual Machines (4): 12.0.2, x86_64: "OpenJDK 12.0.2" /Library/Java/JavaVirtualMachines/adoptopenjdk-12.0.2.jdk/Contents/Home 1.8.0_222, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home 1.8.0_152, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home 1.8.0_151, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home /Library/Java/JavaVirtualMachines/adoptopenjdk-12.0.2.jdk/Contents/Home
獲得4條記錄,其有兩條是剛剛安裝的,其它兩條是之前安裝的oracle
官方的JDK
。其實JDK
切換,本質上切換的JAVA_HOME
這個系統變量。也就是說:JAVA_HOME
當哪一個目錄,在執行java
時就會到哪一個目錄去找至關的文件,也就起到了切換jdk
版本的目的。在切換前,咱們先輸出下當前的JAVA_HOME
來查看一下:
panjiedeMacBook-Pro:~ panjie$ echo $JAVA_HOME /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
liunx系統中,使用
echo $JAVA_HOME$
此時,咱們執行java -version
來覈查一下當前的版本號,的確與JAVA_HOME
設置的相對應:
panjiedeMacBook-Pro:~ panjie$ java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode)
有了前面的基礎自由切換版本就容易了。由於自由切版本,其實就是從新設置環境變量JAVA_HOME
的值:macos
中當用戶的環境變量的位置爲:~/.bash_profile
,咱們編輯該文件並加入如下信息:
# https://segmentfault.com/a/1190000020177762 alias jdk12="export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-12.0.2.jdk/Contents/Home" alias jdk8="export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home" # 默認JDK jdk8
保存退出後,咱們從新啓動一個shell
,分別執行jdk8
,jdk12
:
panjiedeMacBook-Pro:~ panjie$ jdk8 panjiedeMacBook-Pro:~ panjie$ java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode) panjiedeMacBook-Pro:~ panjie$ jdk12 panjiedeMacBook-Pro:~ panjie$ java -version openjdk version "12.0.2" 2019-07-16 OpenJDK Runtime Environment AdoptOpenJDK (build 12.0.2+10) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 12.0.2+10, mixed mode, sharing)
版本切換成功。
除此之外,咱們還能夠用更加簡單的方法來設置此文件(由於安裝路徑實在是太長了)。首先咱們來到查看安裝版本,發現安裝的版本有12.0.2
,1.8.0_222
,1.8.0_152
,1.8.0_151
,則能夠經過這樣的命令來獲取其安裝路徑:
panjiedeMacBook-Pro:~ panjie$ /usr/libexec/java_home -v 1.8.0_222 /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
則~/.bash_profile
能夠修改成:
# https://segmentfault.com/a/1190000020177762 alias jdk12="export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-12.0.2.jdk/Contents/Home" # 使用命令`/usr/libexec/java_home -v 1.8.0_222`來替換原路徑,也至關於輸出了原路徑. alias jdk8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_222`" jdk8
咱們剛剛只是設置了當前用戶的JDK環境。也就是說,若是咱們另外創建一個用戶則可能無論用了(系統會給這個用戶使用其默認的JDK)。因爲咱們的IDEA是可能對每一個項目單元設置JDK
的,因此即便咱們設置了當前用戶的JDK
環境,因爲未改變項目的JKD
環境,其原來的環境仍然會生效。點擊IDEA上方的file
->projetc structure
,來到:
而後new
一個。此時要選擇Java home
的路徑,若是你不當心忘記了,打開shell
並輸入/usr/libexec/java_home -V
來查看便可。設置完成後,該項目便會工做在新的jdk
環境下而與系統的JDK
環境無關了。當使用idea
打開不一樣的項目時,idea
會爲咱們應用不一樣版本的jdk
,咱們也不須要再切環境了。