macos 安裝多版本JDK並進行切換

在開發的過程當中,避免不了多個項目使用的JDK環境不一致。如何在本機安裝多個JDK環境,並能作到隨時進行切換呢?javascript

安裝JDK

安裝的過程當中,咱們使用brew,其官方地址以下:https://brew.sh/。第一次安裝後,版本是最新的,但在之後的使用中,可能brew的版本就過時了。咱們要保證在使用時其版本是最新的,因此每次使用前先執行如下命令以完成升級操做。java

brew update

正式的使用brew前咱們先簡單瞭解一下它。brew能爲咱們簡化在macosliunx中的軟件安裝過程,至關於macos系統下的包管理器。咱們知道在MACOS系統的軟件大致爲兩種:一種是命令行式的命令好比curl,咱們使用brew install curl來安裝。大家敲擊一個命令會完成一些操做,它只能在sheel中使用;另外一種則是應用程序,相對來說比較大,好比XAMPP,咱們則使用brew cask install XAMPP來安裝;git

brew中,對這兩種軟件進行了分類,小的叫作formulae,大的叫作cask。咱們能夠在官網中找到其身影。github

clipboard.png

地址爲:https://formulae.brew.sh/shell

查找JAVA

執行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 javasegmentfault

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

查找JDK關鍵字

除了直接查找java關鍵字外,咱們還能夠查找jdk關鍵字 -> brew serarch jdkoracle

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自管理包的信息。

安裝

在此,咱們安裝兩個版本adoptopenjdk12adoptopenjdk8app

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

在IDEA中設置項目JDK

咱們剛剛只是設置了當前用戶的JDK環境。也就是說,若是咱們另外創建一個用戶則可能無論用了(系統會給這個用戶使用其默認的JDK)。因爲咱們的IDEA是可能對每一個項目單元設置JDK的,因此即便咱們設置了當前用戶的JDK環境,因爲未改變項目的JKD環境,其原來的環境仍然會生效。點擊IDEA上方的file->projetc structure,來到:

clipboard.png

而後new一個。此時要選擇Java home的路徑,若是你不當心忘記了,打開shell並輸入/usr/libexec/java_home -V來查看便可。設置完成後,該項目便會工做在新的jdk環境下而與系統的JDK環境無關了。當使用idea打開不一樣的項目時,idea會爲咱們應用不一樣版本的jdk,咱們也不須要再切環境了。

參考

brew
stackoverflow
www.baeldung.com

相關文章
相關標籤/搜索