如何在 Mac OSX 上安装 Java 以允许版本切换?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/52524112/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do I install Java on Mac OSX allowing version switching?
提问by Jayson Minard
I want to install OpenJDK Java on Mac OSX and have it work alongside other JDK's since it is a newer release. Currently, I downloaded the tar.gz and placed it in my path but that is hard to maintain.
我想在 Mac OSX 上安装 OpenJDK Java 并让它与其他 JDK 一起工作,因为它是一个较新的版本。目前,我下载了 tar.gz 并将其放在我的路径中,但这很难维护。
The only other install I found that do more things automatically is the install via Homebrew cask. It looks like only the current version too:
我发现唯一可以自动做更多事情的其他安装是通过 Homebrew cask 安装。它看起来也只有当前版本:
brew cask info java
Shows:
节目:
java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/
java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/
So I can install it from there, but then what? Am I stuck only with the new version?
所以我可以从那里安装它,但是然后呢?我是否只停留在新版本上?
采纳答案by Jayson Minard
note:These solutions work for various versions of Java including Java 8 and the new Java 13, and for any other previous Java version covered by the listed version managers. This includes alternative JDK's from OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal and more. Easily work with Java 7, Java 8, Java 9, Java 10, Java 11, Java 12, and Java 13!
注意:这些解决方案适用于 Java 的各种版本,包括 Java 8 和新的 Java 13,以及列出的版本管理器涵盖的任何其他以前的 Java 版本。这包括来自 OpenJDK、Oracle、IBM、Azul、Amazon Correto、Graal 等的替代 JDK。轻松使用 Java 7、Java 8、Java 9、Java 10、Java 11、Java 12 和 Java 13!
You have a few options of how to do the installation as well as manage JDK switching. Installation can be done by Homebrew, SDKMAN, Jabba, or a manual install. Switching can be done by JEnv, SDKMAN, Jabba, or manually by setting JAVA_HOME
. All of these are described below.
您有几个关于如何进行安装以及管理 JDK 切换的选项。安装可以通过 Homebrew、SDKMAN、Jabba或手动安装来完成。切换可以通过JEnv、SDKMAN、Jabba 完成,也可以通过设置手动完成JAVA_HOME
。所有这些都在下面描述。
Installation
安装
First, install Java using whatever method you prefer including Homebrew, SDKMAN or a manual install of the tar.gz file. The advantages of a manual install is that the location of the JDK can be placed in a standardized location for Mac OSX.
首先,使用您喜欢的任何方法安装 Java,包括 Homebrew、SDKMAN 或手动安装 tar.gz 文件。手动安装的优点是 JDK 的位置可以放在 Mac OSX 的标准化位置。
Install with SDKMAN
使用 SDKMAN 安装
This is a simple model in that it handles both installation and version switching, with a caveat that it installs the JDK into a non-standard directory.
这是一个简单的模型,它处理安装和版本切换,但需要注意的是它将 JDK 安装到非标准目录中。
<see below "Installing and Switching versions with SDKMAN">
<请参阅下面的“使用 SDKMAN 安装和切换版本”>
Install using Jabba
使用 Jabba 安装
This is also a simple model in that both installation and version switching are handled by the same tool. The installations are made to a non-standard directory.
这也是一个简单的模型,因为安装和版本切换都由同一个工具处理。安装是在非标准目录中进行的。
<see below "Installing and Switching versions with Jabba">
<请参阅下面的“使用 Jabba 安装和切换版本”>
Install manually from OpenJDK download page:
从 OpenJDK 下载页面手动安装:
Download OpenJDK for Mac OSX from http://jdk.java.net/(for example Java 13)
Unarchive the OpenJDK tar, and place the resulting folder (i.e.
jdk-13.jdk
) into your/Library/Java/JavaVirtualMachines/
folder since this is the standard and expected location of JDK installs. You can also install anywhere you want in reality.
从http://jdk.java.net/下载适用于 Mac OSX 的 OpenJDK (例如Java 13)
解压 OpenJDK tar,并将生成的文件夹(即
jdk-13.jdk
)放入您的/Library/Java/JavaVirtualMachines/
文件夹中,因为这是 JDK 安装的标准和预期位置。您也可以在现实中的任何地方安装。
Install with Homebrew
使用 Homebrew 安装
The version of Java available in Homebrew Cask previous to October 3, 2018 was indeed the Oracle JVM. Now however, it has now been updated to OpenJDK. Be sure to update Homebrew and then you will see the lastest version available for install.
2018 年 10 月 3 日之前 Homebrew Cask 中可用的 Java 版本确实是 Oracle JVM。但是,现在它已更新为 OpenJDK。请务必更新 Homebrew,然后您将看到可供安装的最新版本。
install Homebrewif you haven't already. Make sure it is updated:
brew update
Add the casks tap, if you haven't already (or you are not seeing older Java versions anymore with step #3):
brew tap homebrew/cask-versions
and for the AdoptOpenJDKversions, add that tap:
brew tap adoptopenjdk/openjdk
These casks change their Java versions often, and there might be other taps out there with additional Java versions.
Look for installable versions:
brew search java
or for AdoptOpenJDK versions:
brew search jdk
Check the details on the version that will be installed:
brew cask info java
or for the AdoptOpenJDK version:
brew cask info adoptopenjdk
Install a specific version of the JDK such as
java11
,adoptopenjdk8
, or justjava
oradoptopenjdk
for the current. For example:brew cask install java
You can use the fully qualified path to older versions as well:
brew cask install homebrew/cask-versions/java11
如果您还没有安装 Homebrew,请安装。确保它已更新:
brew update
添加桶水龙头,如果您还没有(或者您在步骤 3 中不再看到旧的 Java 版本):
brew tap homebrew/cask-versions
对于AdoptOpenJDK版本,请添加该点击:
brew tap adoptopenjdk/openjdk
这些木桶经常更改它们的 Java 版本,并且可能会有其他带有其他 Java 版本的水龙头。
寻找可安装的版本:
brew search java
或者对于 AdoptOpenJDK 版本:
brew search jdk
检查将安装的版本的详细信息:
brew cask info java
或者对于 AdoptOpenJDK 版本:
brew cask info adoptopenjdk
安装特定版本的 JDK,例如
java11
、adoptopenjdk8
、或仅安装java
或adoptopenjdk
用于当前版本。例如:brew cask install java
您也可以使用旧版本的完全限定路径:
brew cask install homebrew/cask-versions/java11
And these will be installed into /Library/Java/JavaVirtualMachines/
which is the traditional location expected on Mac OSX.
这些将安装到/Library/Java/JavaVirtualMachines/
Mac OSX 上预期的传统位置。
Other installation options:
其他安装选项:
Some other flavours of openJDK are:
openJDK 的其他一些风格是:
Azul SystemsJava Zulucertified builds of OpenJDK can be installed by following the instructions on their site.
可以按照其网站上的说明安装Azul SystemsJava Zulu认证的 OpenJDK 版本。
Zulu? is a certified build of OpenJDK that is fully compliant with the Java SE standard. Zulu is 100% open source and freely downloadable. Now Java developers, system administrators, and end users can enjoy the full benefits of open source Java with deployment flexibility and control over upgrade timing.
祖鲁语?是经过认证的 OpenJDK 构建,完全符合 Java SE 标准。Zulu 是 100% 开源且可免费下载。现在,Java 开发人员、系统管理员和最终用户可以享受开源 Java 的全部好处,以及部署灵活性和对升级时间的控制。
Amazon CorretoOpenJDK builds have an easy to use an installation package for version 8 or version 11 (other versions are coming), and installs to the standard /Library/Java/JavaVirtualMachines/
directory on Mac OSX.
Amazon CorretoOpenJDK 构建有一个易于使用的版本 8 或版本 11(其他版本即将推出)的安装包,并安装到/Library/Java/JavaVirtualMachines/
Mac OSX 上的标准目录。
Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK). Corretto comes with long-term support that will include performance enhancements and security fixes. Amazon runs Corretto internally on thousands of production services and Corretto is certified as compatible with the Java SE standard. With Corretto, you can develop and run Java applications on popular operating systems, including Linux, Windows, and macOS.
Amazon Corretto 是开放 Java 开发工具包 (OpenJDK) 的免费、多平台、生产就绪发行版。Corretto 提供长期支持,包括性能增强和安全修复。Amazon 内部在数千种生产服务上运行 Corretto,并且 Corretto 被认证为与 Java SE 标准兼容。使用 Corretto,您可以在流行的操作系统(包括 Linux、Windows 和 macOS)上开发和运行 Java 应用程序。
Where is my JDK?!?!
我的JDK在哪里?!?!
To find locations of previously installed Java JDK's installed at the default system locations, use:
要查找安装在默认系统位置的先前安装的 Java JDK 的位置,请使用:
/usr/libexec/java_home -V
Matching Java Virtual Machines (6):
13, x86_64: "OpenJDK 13" /Library/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home 12, x86_64: "OpenJDK 12" /Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
11, x86_64: "Java SE 11" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
10.0.2, x86_64: "Java SE 10.0.2" /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
9, x86_64: "Java SE 9" /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
1.8.0_144, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
匹配Java虚拟机(6):
13、x86_64:“OpenJDK 13”/Library/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home 12、x86_64:“OpenJDK 12”/Library/Java/JavaVirtualMachines/jdk-12 .jdk/Contents/Home
11,x86_64:“Java SE 11”/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
10.0.2,x86_64:“Java SE 10.0.2”/Library/Java/JavaVirtualMachines /jdk-10.0.2.jdk/Contents/Home
9,x86_64:“Java SE 9”/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
1.8.0_144,x86_64:“Java SE 8”/Library /Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
You can also report just the location of a specific Java version using -v
. For example for Java 13:
您还可以使用 仅报告特定 Java 版本的位置-v
。例如对于 Java 13:
/usr/libexec/java_home -v 13
/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
/库/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
Knowing the location of the installed JDK's is also useful when using tools like JEnv, or adding a local install to SDKMAN, or linking a system JDK in Jabba -- and you need to know where to find them.
在使用 JEnv 等工具、向 SDKMAN 添加本地安装或在 Jabba 中链接系统 JDK 时,了解已安装 JDK 的位置也很有用——您需要知道在哪里可以找到它们。
If you need to find JDK's installed by other tools, check these locations:
如果您需要查找其他工具安装的 JDK,请检查以下位置:
- SDKMAN installs to
~/.sdkman/candidates/java/
- Jabba installs to
~/.jabba/jdk
- SDKMAN 安装到
~/.sdkman/candidates/java/
- 贾巴安装到
~/.jabba/jdk
Switching versions manually
手动切换版本
The Java executable is a wrapper that will use whatever JDK is configured in JAVA_HOME
, so you can change that to also change which JDK is in use.
Java 可执行文件是一个包装器,它将使用 中配置的任何 JDK JAVA_HOME
,因此您可以更改它以更改正在使用的 JDK。
For example, if you installed or untar'd JDK 13 to /Library/Java/JavaVirtualMachines/jdk-13.jdk
if it is the highest version number it should already be the default, if not you could simply set:
例如,如果您将 JDK 13 安装或解压缩/Library/Java/JavaVirtualMachines/jdk-13.jdk
为最高版本号,则它应该已经是默认值,否则您可以简单地设置:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
And now whatever Java executable is in the path will see this and use the correct JDK.
现在路径中的任何 Java 可执行文件都会看到它并使用正确的 JDK。
Using the /usr/libexec/java_home
utility as previously described helps you to create aliases or to run commands to change Java versions by identifying the locations of different JDK installations. For example, creating shell aliases in your .profile
or .bash_profile
to change JAVA_HOME
for you:
/usr/libexec/java_home
通过识别不同 JDK 安装的位置,如前所述使用该实用程序可帮助您创建别名或运行命令来更改 Java 版本。例如,在您的.profile
或为您.bash_profile
更改的shell 别名中创建JAVA_HOME
:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_12_HOME=$(/usr/libexec/java_home -v12)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'
alias java10='export JAVA_HOME=$JAVA_10_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java12='export JAVA_HOME=$JAVA_12_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'
# default to Java 13
java13
Then to change versions, just use the alias.
然后要更改版本,只需使用别名。
java8
java -version
java version "1.8.0_144"
java版本“1.8.0_144”
Of course, setting JAVA_HOME
manually works too!
当然,JAVA_HOME
手动设置也可以!
Switching versions with JEnv
使用 JEnv 切换版本
JEnvexpects the Java JDK's to already exist on the machine and can be in any location. Typically you will find installed Java JDK's in /Library/Java/JavaVirtualMachines/
. JEnv allows setting the global version of Java, one for the current shell, and a per-directory local version which is handy when some projects require different versions than others.
JEnv期望 Java JDK 已经存在于机器上并且可以位于任何位置。通常,您会在/Library/Java/JavaVirtualMachines/
. JEnv 允许设置 Java 的全局版本,一个用于当前 shell,以及一个每个目录的本地版本,这在某些项目需要与其他项目不同的版本时很方便。
Install JEnv if you haven't already, instructions on the site http://www.jenv.be/for manual install or using Homebrew.
Add any Java version to JEnv (adjust the directory if you placed this elsewhere):
jenv add /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
Set your global version using this command:
jenv global 13
如果您还没有安装 JEnv,请参考网站http://www.jenv.be/上的说明进行手动安装或使用 Homebrew。
将任何 Java 版本添加到 JEnv(如果您将其放在其他地方,请调整目录):
jenv add /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
使用以下命令设置您的全球版本:
jenv global 13
You can also add other existing versions using jenv add
in a similar manner, and list those that are available. For example Java 8:
您还可以jenv add
以类似的方式添加其他现有版本,并列出可用的版本。例如 Java 8:
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
jenv versions
See the JEnv docsfor more commands. You may now switch between any Java versions (Oracle, OpenJDK, other) at any time either for the whole system, for shells, or per local directory.
有关更多命令,请参阅JEnv 文档。您现在可以随时在任何 Java 版本(Oracle、OpenJDK、其他)之间切换整个系统、shell 或每个本地目录。
To help manage JAVA_HOME
while using JEnv you can add the export pluginto do this for you.
为了JAVA_HOME
在使用 JEnv 时帮助管理,您可以添加导出插件来为您执行此操作。
$ jenv enable-plugin export
You may restart your session to activate jenv export plugin echo export plugin activated
The export plugin may not adjust JAVA_HOME
if it is already set, so you may need to clear this variable in your profile so that it can be managed by JEnv.
如果导出插件JAVA_HOME
已经设置,它可能不会调整,因此您可能需要在您的配置文件中清除此变量,以便它可以由 JEnv 管理。
You can also use jenv exec <command> <parms...>
to run single commands with JAVA_HOME
and PATH
set correctly for that one command, which could include opening another shell.
您还可以使用jenv exec <command> <parms...>
该命令运行单个命令JAVA_HOME
并PATH
为其正确设置,这可能包括打开另一个 shell。
Installing and Switching versions with SDKMAN
使用 SDKMAN 安装和切换版本
SDKMANis a bit different and handles both the install and the switching. SDKMAN also places the installed JDK's into its own directory tree, which is typically ~/.sdkman/candidates/java
. SDKMAN allows setting a global default version, and a version specific to the current shell.
SDKMAN有点不同,它处理安装和切换。SDKMAN 还将已安装的 JDK 放入其自己的目录树中,通常为~/.sdkman/candidates/java
. SDKMAN 允许设置全局默认版本和特定于当前 shell 的版本。
Install SDKMAN from https://sdkman.io/install
List the Java versions available to make sure you know the version ID
sdk list java
Install one of those versions, for example, Java 13:
sdk install java 13.0.0-open
Make 13 the default version:
sdk default java 13.0.0-open
Or switch to 13 for the session:
sdk use java 13.0.0-open
从https://sdkman.io/install安装 SDKMAN
列出可用的 Java 版本以确保您知道版本 ID
sdk list java
安装其中一个版本,例如 Java 13:
sdk install java 13.0.0-open
将 13 设为默认版本:
sdk default java 13.0.0-open
或者切换到 13 进行会话:
sdk use java 13.0.0-open
When you list available versions for installation using the list command, you will see a wide variety of distributions of Java:
当您使用 list 命令列出可供安装的可用版本时,您将看到各种 Java 发行版:
sdk list java
And install additional versions, such as JDK 8:
并安装其他版本,例如 JDK 8:
sdk install java 8.0.181-oracle
SDKMAN can work with previously installed existing versions. Just do a local install giving your own version label and the location of the JDK:
SDKMAN 可以与以前安装的现有版本一起使用。只需进行本地安装,提供您自己的版本标签和 JDK 的位置:
sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
And use it freely:
并自由使用它:
sdk use java my-local-13
More information is available in the SDKMAN Usage Guidealong with other SDK'sit can install and manage.
SDKMAN 使用指南以及它可以安装和管理的其他 SDK 中提供了更多信息。
SDKMAN will automatically manage your PATH
and JAVA_HOME
for you as you change versions.
SDKMAN 将在您更改版本时自动管理您的PATH
和JAVA_HOME
为您服务。
Installing and Switching versions with Jabba
使用 Jabba 安装和切换版本
Jabbaalso handles both the install and the switching. Jabba also places the installed JDK's into its own directory tree, which is typically ~/.jabba/jdk
.
Jabba还处理安装和切换。Jabba 还将已安装的 JDK 放入其自己的目录树中,通常为~/.jabba/jdk
.
Install Jabba by following the instructions on the home page.
List available JDK's
jabba ls-remote
Install Java JDK 12
jabba install [email protected]
Use it:
jabba use [email protected]
列出可用的 JDK
jabba ls-remote
安装 Java JDK 12
jabba install [email protected]
用它:
jabba use [email protected]
You can also alias version names, link to existing JDK's already installed, and find a mix of interesting JDK's such as GraalVM, Adopt JDK, IBM JDK, and more. The complete usage guideis available on the home page as well.
您还可以为版本名称添加别名,链接到已安装的现有 JDK,并找到有趣的 JDK 组合,例如 GraalVM、Adopt JDK、IBM JDK 等。完整的使用指南也可在主页上找到。
Jabba will automatically manage your PATH
and JAVA_HOME
for you as you change versions.
当您更改版本时,Jabba 将自动管理您的PATH
和JAVA_HOME
为您管理。
回答by Wim Deblauwe
Another alternative is using SDKMAN! See https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/
另一种选择是使用SDKMAN!见https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/
First install SDKMAN: https://sdkman.io/installand then...
首先安装 SDKMAN:https://sdkman.io/install 然后...
- Install Oracle JDK 8 with:
sdk install java 8.0.181-oracle
- Install OpenJDK 11 with:
sdk install java 11.0.0-open
- 使用以下命令安装 Oracle JDK 8:
sdk install java 8.0.181-oracle
- 使用以下命令安装 OpenJDK 11:
sdk install java 11.0.0-open
To switch:
换成:
- Switch to JDK 8 with
sdk use java 8.0.181-oracle
- Switch to JDK 11 with
sdk use java 11.0.0-open
- 切换到 JDK 8
sdk use java 8.0.181-oracle
- 切换到 JDK 11
sdk use java 11.0.0-open
To set a default:
要设置默认值:
- Default to JDK 8 with
sdk default java 8.0.181-oracle
- Default to JDK 11 with
sdk default java 11.0.0-open
- 默认为 JDK 8
sdk default java 8.0.181-oracle
- 默认为 JDK 11
sdk default java 11.0.0-open
回答by Ranganath Samudrala
IMHO, There is no need to install all the additional applications/packages.
恕我直言,无需安装所有其他应用程序/包。
Check available versions using the command:
使用以下命令检查可用版本:
> /usr/libexec/java_home -V
Matching Java Virtual Machines (8):
11, x86_64: "Java SE 11-ea" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
10.0.2, x86_64: "Java SE 10.0.2" /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_181-zulu-8.31.0.1, x86_64: "Zulu 8" /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
1.8.0_151, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Now if you want to pick Azul JDK 8 in the above list, and NOT Oracle's Java SE 8, invoke the command as below:
现在,如果您想在上面的列表中选择 Azul JDK 8,而不是 Oracle 的 Java SE 8,请调用如下命令:
> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
To pick Oracle's Java SE 8 you would invoke the command:
要选择 Oracle 的 Java SE 8,您将调用以下命令:
> /usr/libexec/java_home -v 1.8.0_151
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
As you can see the version number provided shall be the unique set of strings: 1.8.0_181 vs 1.8.0_151
正如你所看到的,提供的版本号应该是唯一的一组字符串:1.8.0_181 vs 1.8.0_151
回答by Hugues M.
Manually switching system-default version without 3rd party tools:
不使用第三方工具手动切换系统默认版本:
As detailed in this older answer, on macOS /usr/bin/java
is a wrapper tool that will use Java version pointed by JAVA_HOME
or if that variable is not set will look for Java installations under /Library/Java/JavaVirtualMachines/
and will use the one with highest version. It determines versions by looking at Contents/Info.plist
under each package.
正如这个旧答案中所详述的,在 macOS 上/usr/bin/java
是一个包装工具,它将使用所指向的 Java 版本,JAVA_HOME
或者如果未设置该变量,则将在下面查找 Java 安装/Library/Java/JavaVirtualMachines/
并使用具有最高版本的那个。它通过查看Contents/Info.plist
每个包下来确定版本。
Armed with this knowledge you can:
有了这些知识,您可以:
- control which version the system will use by renaming
Info.plist
in versions you don't want to use as default (that file is not used by the actual Java runtime itself). - control which version to use for specific tasks by setting
$JAVA_HOME
- 通过重命名
Info.plist
您不想用作默认值的版本来控制系统将使用哪个版本(实际 Java 运行时本身不使用该文件)。 - 通过设置来控制用于特定任务的版本
$JAVA_HOME
I've just verified this is still true with OpenJDK & Mojave.
我刚刚验证了 OpenJDK 和 Mojave 仍然如此。
On a brand new system, there is no Java version installed:
在一个全新的系统上,没有安装 Java 版本:
$ java -version
No Java runtime present, requesting install.
Cancel this, download OpenJDK 11 & 12ea on https://jdk.java.net; install OpenJDK11:
取消这个,在https://jdk.java.net上下载 OpenJDK 11 & 12ea ;安装 OpenJDK11:
$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz
System java is now 11:
系统 java 现在是 11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
Install OpenJDK12 (early access at the moment):
安装 OpenJDK12(目前抢先体验):
$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz
System java is now 12:
系统 java 现在是 12:
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
Now let's "hide" OpenJDK 12 from system java wrapper:
现在让我们从系统 java 包装器中“隐藏”OpenJDK 12:
$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled
System java is back to 11:
系统java回到11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
And you can still use version 12 punctually by manually setting JAVA_HOME
:
您仍然可以通过手动设置来准时使用版本 12 JAVA_HOME
:
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
回答by VK321
This is how I did it.
我就是这样做的。
Step 1:Install Java 11
第 1 步:安装 Java 11
You can download Java 11 dmg for mac from here: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
您可以从这里下载 Java 11 dmg for mac:https: //www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
Step 2:After installation of Java 11. Confirm installation of all versions. Type the following command in your terminal.
第二步:安装Java 11后,确认安装所有版本。在终端中键入以下命令。
/usr/libexec/java_home -V
Step 3:Edit .bash_profile
第 3 步:编辑 .bash_profile
sudo nano ~/.bash_profile
Step 4:Add 11.0.1 as default. (Add below line to bash_profile file).
第四步:默认添加11.0.1。(将下面的行添加到 bash_profile 文件中)。
export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)
to switch to any version
切换到任何版本
export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)
Now Press CTRL+X to exit the bash. Press 'Y' to save changes.
现在按 CTRL+X 退出 bash。按“Y”保存更改。
Step 5:Reload bash_profile
第 5 步:重新加载 bash_profile
source ~/.bash_profile
Step 6:Confirm current version of Java
第 6 步:确认当前的 Java 版本
java -version
回答by Lyncean Patel
With Homebrew and jenv:
使用 Homebrew 和 jenv:
Assumption: Mac machine and you already have installed homebrew.
假设:Mac 机器并且您已经安装了自制软件。
Install cask:
安装木桶:
$ brew tap caskroom/cask
$ brew tap caskroom/versions
To install latest java:
安装最新的java:
$ brew cask install java
To install java 8:
要安装 Java 8:
$ brew cask install java8
To install java 9:
要安装 Java 9:
$ brew cask install java9
If you want to install/manage multiple version then you can use 'jenv':
如果要安装/管理多个版本,则可以使用“jenv”:
Install and configure jenv:
安装和配置 jenv:
$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
Add the installed java to jenv:
将已安装的 java 添加到 jenv 中:
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/Contents/Home
To see all the installed java:
要查看所有已安装的 java:
$ jenv versions
Above command will give the list of installed java:
上面的命令将给出已安装的java列表:
* system (set by /Users/lyncean/.jenv/version)
1.8
1.8.0.202-ea
oracle64-1.8.0.202-ea
Configure the java version which you want to use:
配置要使用的 java 版本:
$ jenv global oracle64-1.6.0.39
回答by Lyncean Patel
If you have multiple versions installed on your machine, add the following in bash profile:
如果您的机器上安装了多个版本,请在 bash 配置文件中添加以下内容:
export JAVA_HOME_7=$(/usr/libexec/java_home -v1.7)
export JAVA_HOME_8=$(/usr/libexec/java_home -v1.8)
export JAVA_HOME_9=$(/usr/libexec/java_home -v9)
导出 JAVA_HOME_7=$(/usr/libexec/java_home -v1.7)
导出 JAVA_HOME_8=$(/usr/libexec/java_home -v1.8)
导出 JAVA_HOME_9=$(/usr/libexec/java_home -v9)
And add the following aliases:
并添加以下别名:
alias java7='export JAVA_HOME=$JAVA_HOME_7'
alias java8='export JAVA_HOME=$JAVA_HOME_8'
alias java9='export JAVA_HOME=$JAVA_HOME_9'
别名 java7='导出 JAVA_HOME=$JAVA_HOME_7'
别名 java8='导出 JAVA_HOME=$JAVA_HOME_8'
别名 java9='导出 JAVA_HOME=$JAVA_HOME_9'
And can switch to required version by using the alias:
并且可以使用别名切换到所需的版本:
In terminal:
在终端:
~ >> java7
export JAVA_HOME=$JAVA_7_HOME
~ >> java7
export JAVA_HOME=$JAVA_7_HOME