不久前,我写了一篇文章,Java Lambda表达式说明。对于我来讲,使用Java 8探索这个概念很容易,由于它已经安装在个人项目中。可是在我目前的项目中,咱们仍然使用Java 8,如今,我想升级并学习Java 11。然而,不幸的是,我没法安装它。html
不少Java开发人员都有这种状况。有时候,您想学习和探索Java的最新版本,例如Java 11,可是您不能在本身的机器上安装它,由于您和您的团队正在使用一个较老的版本,例如Java 8,而且您不想破坏您的项目。java
或者,假设您正在处理多个项目,其中一些项目使用Java 8,另外一些新项目使用Java 11。所以,为了并行处理这些项目,您须要在您的机器上安装多个jdk,并可以在它们之间进行切换。git
若是有一种方法,若是您可以安装多个版本的Java并根据须要关闭和打开它们,又会怎样呢?github
有一个工具叫SDKMan,它容许咱们这样作。官方网站这样描述:shell
"SDKMan 是一个工具,用于在大多数基于Unix的系统上管理多个软件开发工具包的并行版本。它提供了一个方便的命令行接口(CLI)和API,用于安装、切换、删除和列出候选项。”express
使用SDKMan的一些要点以下:bash
SDKMan能够运行在任何基于unix的平台上,好比Mac OSX、Linux、Cygwin、Solaris和FreeBSD,咱们可使用如下命令安装它。oracle
只需打开终端并输入:curl
$ curl -s "https://get.sdkman.io" | bash $ source "$HOME/.sdkman/bin/sdkman-init.sh"
咱们可使用sdk version
验证安装,“ sdk help
命令将容许咱们完成关于sdk
命令使用的帮助。工具
Beacsue SDKMan是用bash编写的,而且只须要curl和zip/unzip在您的系统上。您也能够在Windows上安装SDKMan,方法是首先安装Cygwin或Git Bash for Windows环境,而后运行上面的命令。
SDKMan支持为JVM安装29个软件开发工具包,例如Java、Groovy、Scala、Kotlin、Ceylon、Ant、Gradle、Grails、Maven、Gradle、SBT、Spark和Spring Boot。咱们可使用sdk list
命令得到完整的列表。
命令sdk list java
将给咱们一个java版本列表,咱们可使用SDKMan安装,以下所示:
$ sdk list java ================================================================================ Available Java Versions ================================================================================ 13.ea.02-open 1.0.0-rc-10-grl 12.ea.26-open 1.0.0-rc-9-grl 11.0.2-zulu 1.0.0-rc-8-grl 11.0.2-open 11.0.1-zulufx 10.0.2-zulu 10.0.2-open 9.0.7-zulu 9.0.4-open 8.0.202-amzn 8.0.201-zulu 8.0.201-oracle 8.0.192-zulufx 7.0.181-zulu 1.0.0-rc-11-grl ================================================================================ + - local version * - installed > - currently in use ================================================================================
如今,假设咱们想安装OpenJDK版本的Java v9。而后,咱们将在终端中执行下面的命令,该命令还将更新 PATH
和JAVA_HOME
变量:
$ sdk install java 9.0.4-open
该命令将花费一些时间来执行,由于它将下载JDK到咱们机器上,该命令将输出以下内容:
Downloading: java 9.0.4-open In progress... ######################################################################## 100.0% Repackaging Java 9.0.4-open... Done repackaging... Cleaning up residual files... Installing: java 9.0.4-open Done installing! Setting java 9.0.4-open as default.
如今,若是咱们检查Java版本和JAVA_HOME,能够看到Java已经更新到9.0.4
$ java -version openjdk version "9.0.4" OpenJDK Runtime Environment (build 9.0.4+11) OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode) $ echo $JAVA_HOME /Users/xbbnrde/.sdkman/candidates/java/current
咱们能够按照相同的过程来安装上面列表中看到的任何版本。让咱们假设要安装Java V11版本。而后,咱们能够执行命令:
$ sdk install java 11.0.2-open Downloading: java 11.0.2-open In progress... ######################################################################## 100.0% Repackaging Java 11.0.2-open... Done repackaging... Cleaning up residual files... Installing: java 11.0.2-open Done installing! Do you want java 11.0.2-open to be set as default? (Y/n): Y Setting java 11.0.2-open as default.
如今,若是咱们再次检查咱们的Java版本和JAVA_HOME,咱们能够看到Java已经更新到11.0.2:
$ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode) $ echo $JAVA_HOME /Users/xbbnrde/.sdkman/candidates/java/current
注意:有时,您须要关闭并从新打开终端才能看到更改。
首先,咱们须要找出您的机器上安装了Java的位置。在个人机器上,它安装在文件夹 jdk1.8.0_172.jdk
,它位于文件夹/Library/Java/JavaVirtualMachines
下。让咱们经过**<java-folder>**来引用这个文件夹。
咱们要作的第二件事是在已安装的**<java-folder>**和SDKMan之间创建一个符号连接。咱们能够经过运行如下命令来实现:
$ ln -s /Library/Java/JavaVirtualMachines/<java-folder> ~/.sdkman/candidates/java/<java-folder> $ sudo ln -s /Library/Java/JavaVirtualMachines/<java-folder>/Contents/Home/bin ~/.sdkman/candidates/java/<java-folder>/bin
如今,若是咱们再次执行sdk list java
命令,咱们将获得:
================================================================================ Available Java Versions ================================================================================ + jdk1.8.0_172.jd 8.0.201-zulu 13.ea.02-open 8.0.201-oracle 12.ea.26-open 8.0.192-zulufx 11.0.2-zulu 7.0.181-zulu > * 11.0.2-open 1.0.0-rc-12-grl 11.0.2.j9-adpt 1.0.0-rc-11-grl 11.0.2.hs-adpt 1.0.0-rc-10-grl 11.0.1-zulufx 1.0.0-rc-9-grl 10.0.2-zulu 1.0.0-rc-8-grl 10.0.2-open 9.0.7-zulu * 9.0.4-open 8.0.202-amzn 8.0.202.j9-adpt 8.0.202.hs-adpt ================================================================================ + - local version * - installed > - currently in use ================================================================================
咱们能够清楚地看到,咱们的机器上已经安装了3个JDK,而且JDK 11.0.2-open
目前正在使用。可是,若是咱们想在它们之间切换或者安装一个新的,咱们能够经过使用**sdk use java <version_which_you_want_to_use>**就能很是容易地作到这一点,以下所示:
$ sdk use java 9.0.4-open Using java version 9.0.4-open in this shell. $ java -version openjdk version "9.0.4" OpenJDK Runtime Environment (build 9.0.4+11) OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)
$ sdk use java jdk1.8.0_172.jdk Using java version jdk1.8.0_172.jdk in this shell. $ java -version java version "1.8.0_172" Java(TM) SE Runtime Environment (build 1.8.0_172-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
$ sdk use java 11.0.2-open Using java version 11.0.2-open in this shell. $ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
使用
sdk use
命令只能使您在执行sdk use
命令的终端shell中使用指定版本的JDK。若是您关闭终端并再次打开它,您将使用先前安装的版本。
可是若是您想为全部终端和应用程序激活一个版本的JDK,您可使用命令sdk default java <your_version>:
$ sdk default java 11.0.2-open Default java version set to 11.0.2-open $ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
或者,您能够卸载该版本并从新安装它,以下所示,这将把该版本设置为当前JDK。
若是你想卸载任何JDK版本,例如11.0.2-open,你能够这样作:
$ sdk uninstall java 11.0.2-open
并且,若是您想再次安装卸载后的版本,您能够从新安装它,并且这一次,SDKMan不会下载它,由于它已经在您的机器上安装了它(若是您不手动删除它)。
$ sdk install java 11.0.2-open Found a previously downloaded java 11.0.2-open archive. Not downloading it again... Installing: java 11.0.2-open Done installing! Do you want java 11.0.2-open to be set as default? (Y/n): y Setting java 11.0.2-open as default.
IntelliJ IDEA
中使用一个sdkman安装的JDKSDKMan 把全部的JDK都安装在.sdkman/candidates/java/
这个目录下面, 您能够在您的主目录中找到.sdkman
文件夹。
在IntelliJ中打开任何Java项目后,均可以按Command +
打开项目结构窗口。 在该窗口中,您须要单击New…在Project SDK部分,在那里,您能够在浏览窗口中输入.sdkman/candidate/java/
,并从`.sdkman/candidate/java/”中选择任何JDK。
由于.sdkman
是一个隐藏的文件夹,若是你在寻找它的时候遇到了一些问题,你可使用下面的命令建立一个符号连接到它和一个非隐藏文件夹:
$ ln -s ~/.sdkman ~/sdkman
您能够在个人GitHub repository上找到本文的完整源代码,请随时提供宝贵的反馈!
翻译: 白石
原文地址: https://dzone.com/articles/how-to-install-multiple-versions-of-java-on-the-sa