我想在Mac OSX上安装OpenJDK Java,并使其与其他JDK一起工作,因为它是较新的发行版。当前,我下载了tar.gz并将其放置在我的路径中,但这很难维护。
我发现唯一可以自动执行更多操作的其他安装是通过Homebrew cask进行的安装。看起来也只有当前版本:
brew cask info java
显示:
java:12,33
https://jdk.java.net/
所以我可以从那里安装,那又如何呢?我只能坚持使用新版本吗?
更新: 截至2019年3月19日,自制酒桶现在指向OpenJDK 12
答案 0 :(得分:341)
注释: 这些解决方案适用于各种Java版本,包括Java 11和新Java 12,以及所列版本管理器涵盖的任何其他先前Java版本。这包括来自OpenJDK,Oracle,IBM,Azul,Amazon Correto,Graal等的替代JDK。轻松使用Java 7,Java 8,Java 9,Java 10,Java 11,Java 12,甚至可以早期使用Java 13!
您可以选择几种方式来进行安装以及管理JDK切换。可以通过Homebrew,SDKMAN,Jabba或手动安装来完成安装。切换可以通过JEnv,SDKMAN,Jabba完成,也可以通过设置JAVA_HOME
手动完成。所有这些都在下面描述。
首先,使用您喜欢的任何方法(包括Homebrew,SDKMAN或手动安装tar.gz文件)安装Java。手动安装的优点是可以将JDK的位置放置在Mac OSX的标准位置。
这是一个简单的模型,它可以处理安装和版本切换,但需要注意的是它将JDK安装到非标准目录中。
<< em>请参见下面的“使用SDKMAN安装和切换版本” >
这也是一个简单的模型,因为安装和版本切换均由同一工具处理。安装是在非标准目录中进行的。
<< em>请参见下面的“使用Jabba安装和切换版本” >
取消存档OpenJDK tar,并将生成的文件夹(即jdk-12.jdk
)放入您的/Library/Java/JavaVirtualMachines/
文件夹中,因为这是JDK安装的标准位置。您还可以在现实中想要的任何地方安装。
2018年10月3日之前在Homebrew Cask中可用的Java版本确实是Oracle JVM。但是,现在它已更新为OpenJDK。请确保更新Homebrew,然后您将看到可用于安装的最新版本。
install Homebrew(如果尚未安装)。确保已更新:
brew update
添加酒桶水龙头(如果尚未安装)
brew tap homebrew/cask-versions
寻找可安装的版本:
brew search java
检查将要安装的版本的详细信息:
brew cask info java
安装特定版本的JDK,例如java8
,java9
,java10
,java11
,java12
或仅{{1 }}当前版本:
java
AdoptOpenJDK版本现在也可以从Homebrew Cask中获得:
brew cask install java
这些将安装到Mac OSX上的传统位置brew cask install adoptopenjdk
中。
openJDK的其他一些风味是:
Azul Systems Java Zulu 认证的OpenJDK构建可以通过遵循instructions on their site来安装。
Zulu®是OpenJDK的经过认证的版本,完全符合Java SE标准。 Zulu是100%开放源代码,可免费下载。现在,Java开发人员,系统管理员和最终用户可以通过部署灵活性并控制升级时间来享受开源Java的全部好处。
Amazon Correto OpenJDK构建具有易于使用的版本8或版本11(其他版本即将推出)的安装软件包,并安装到Mac OSX上的标准/Library/Java/JavaVirtualMachines/
目录中。
Amazon Corretto是Open Java Development Kit(OpenJDK)的免费,多平台,可立即投入生产的发行版。 Corretto带有长期支持,其中包括性能增强和安全修复。亚马逊内部在数千种生产服务上运行Corretto,Corretto被证明与Java SE标准兼容。使用Corretto,您可以在流行的操作系统(包括Linux,Windows和macOS)上开发和运行Java应用程序。
要查找以前在默认系统位置安装的Java JDK的位置,请使用:
/Library/Java/JavaVirtualMachines/
匹配Java虚拟机(5):
12,x86_64:“ OpenJDK 12” /库/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
您还可以使用/usr/libexec/java_home -V
报告特定Java版本的位置。例如对于Java 12:
-v
/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
使用JEnv之类的工具,将本地安装添加到SDKMAN或在Jabba中链接系统JDK时,知道已安装JDK的位置也很有用。
如果您需要查找其他工具安装的JDK,请检查以下位置:
/usr/libexec/java_home -v 12
~/.sdkman/candidates/java/
Java可执行文件是一个包装程序,它将使用~/.jabba/jdk
中配置的JDK,因此您可以对其进行更改以更改所使用的JDK。
例如,如果您将JDK 12安装或解压缩到JAVA_HOME
,如果它是最高版本号,则它应该已经是默认版本号;如果不是,则可以简单地设置:
/Library/Java/JavaVirtualMachines/jdk-12.jdk
现在路径中的任何Java可执行文件都将看到此内容并使用正确的JDK。
如前所述,使用export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
实用程序可帮助您创建别名或运行命令以通过识别不同JDK安装的位置来更改Java版本。例如,在/usr/libexec/java_home
或.profile
中创建shell别名以为您更改.bash_profile
:
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)
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'
# default to Java 12
java12
java版本“ 1.8.0_144”
当然,手动设置java8
java -version
也可以!
JEnv希望Java JDK已经存在于计算机上,并且可以位于任何位置。通常,您会在JAVA_HOME
中找到已安装的Java JDK。 JEnv允许设置Java的全局版本,一个用于当前Shell的全局版本以及每个目录的本地版本,当某些项目需要与其他项目不同的版本时,这非常方便。
如果尚未安装JEnv,请在http://www.jenv.be/网站上进行手动安装或使用Homebrew的说明。
将任何Java版本添加到JEnv(如果将其放置在其他位置,请调整目录):
/Library/Java/JavaVirtualMachines/
使用以下命令设置全局版本:
jenv add /Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
您还可以类似的方式使用jenv global 12
添加其他现有版本,并列出可用的版本。例如Java 8:
jenv add
有关更多命令,请参见JEnv docs。现在,您可以随时在整个系统,外壳程序或每个本地目录之间的任何Java版本(Oracle,OpenJDK等)之间进行切换。
要在使用JEnv时帮助管理jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
jenv versions
,可以添加export plugin为您完成此操作。
JAVA_HOME
如果已设置导出插件,$ jenv enable-plugin export
You may restart your session to activate jenv export plugin echo export plugin activated
可能不会进行调整,因此您可能需要清除配置文件中的此变量,以便可以由JEnv对其进行管理。
您还可以使用JAVA_HOME
运行单个命令,并为该命令正确设置jenv exec <command> <parms...>
和JAVA_HOME
,这可能包括打开另一个shell。
SDKMAN稍有不同,它可以处理安装和切换。 SDKMAN还将已安装的JDK放入其自己的目录树中,该目录树通常为PATH
。 SDKMAN允许设置全局默认版本以及特定于当前Shell的版本。
使用SDKMAN安装Java 12:
~/.sdkman/candidates/java
将12设为默认版本:
sdk install java 12.0.0-open
或将会话切换为12:
sdk default java 12.0.0-open
您可以使用list命令列出可用的安装版本:
sdk use java 12.0.0-open
并安装其他版本,例如JDK 8:
sdk list java
SDKMAN可以使用以前安装的现有版本。只需进行本地安装即可提供自己的版本标签和JDK的位置:
sdk install java 8.0.181-oracle
并自由使用它:
sdk install java my-local-12 /Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
SDKMAN Usage Guide以及other SDK's可以安装和管理更多信息。
SDKMAN会在您更改版本时自动为您管理sdk use java my-local-12
和PATH
。
Jabba还可处理安装和切换。 Jabba还将已安装的JDK放置在其自己的目录树中,该目录树通常为JAVA_HOME
。
按照instructions on the home page安装Jabba。
列出可用的JDK's
~/.jabba/jdk
安装Java JDK 12
jabba ls-remote
使用它:
jabba install openjdk@1.12.0
您还可以别名版本名称,链接到已安装的现有JDK,并找到有趣的JDK(例如GraalVM,Adopt JDK,IBM JDK等)的混合体。完整的usage guide也可在主页上找到。
Jabba会在您更改版本时自动为您管理jabba use openjdk@1.12.0
和PATH
。
答案 1 :(得分:3)
无需第三方工具即可手动切换系统默认版本:
如this older answer中所述,在macOS /usr/bin/java
上是一个包装器工具,将使用JAVA_HOME
所指向的Java版本,或者如果未设置该变量,则会在{{ 1}},并将使用版本最高的版本。它通过查看每个软件包下的/Library/Java/JavaVirtualMachines/
来确定版本。
有了这些知识,您可以:
Contents/Info.plist
重命名为您不想使用的默认版本(实际的Java运行时本身不使用该文件)来控制系统将使用的版本。Info.plist
我刚刚验证了OpenJDK和Mojave的正确性。
在全新系统上,未安装Java版本:
$JAVA_HOME
取消此操作,在https://jdk.java.net上下载OpenJDK 11和12ea; 安装OpenJDK11:
$ java -version
No Java runtime present, requesting install.
系统Java现在是11:
$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz
安装OpenJDK12(目前可早期访问):
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
系统Java现在是12:
$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz
现在让我们从系统Java包装器中“隐藏” OpenJDK 12:
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
系统Java回到11:
$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled
您仍然可以通过手动设置$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
准时使用版本12:
JAVA_HOME
答案 2 :(得分:3)
您可以使用asdf在多个Java版本之间安装和切换。它还具有其他语言的插件。您可以使用Homebrew安装asdf
brew install asdf
配置asdf后,安装Java插件
asdf plugin-add java
选择要安装的版本
asdf list-all java
例如,安装和配置“采用openjdk8”
asdf install java adoptopenjdk-8.0.272+10
asdf global java adoptopenjdk-8.0.272+10
最后,如果需要,为您的shell配置JAVA_HOME。只需在zsh的情况下添加到您的Shell初始化脚本(例如〜/ .zshrc)中即可。
. ~/.asdf/plugins/java/set-java-home.zsh
答案 3 :(得分:2)
这就是我的方法。
步骤1:安装Java 11
您可以从此处下载适用于Mac的Java 11 dmg:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
步骤2:安装Java 11之后。确认已安装所有版本。在终端中键入以下命令。
/usr/libexec/java_home -V
第3步:编辑.bash_profile
sudo nano ~/.bash_profile
第4步:默认添加11.0.1。 (将以下行添加到bash_profile文件中。)
export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)
切换到任何版本
export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)
现在按CTRL + X退出bash。按“ Y”保存更改。
步骤5:重新加载bash_profile
source ~/.bash_profile
步骤6:确认Java的当前版本
java -version
答案 4 :(得分:1)
此答案在Jayson的出色回答的基础上,针对您的用例的最佳方法提供了一些更自以为是的指导:
手动管理版本可能是最糟糕的选择。如果您决定手动切换版本,则可以使用此Bash代码代替Jayson的详细代码(homebrew-openjdk README中的代码段:
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}
Jayson的答案提供了SDKMAN和jenv的基本命令。如果您想了解更多有关这些工具的背景信息,请参见SDKMAN和jenv的更多信息。
答案 5 :(得分:0)
另一种替代方法是使用SDKMAN!参见https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/
首先安装SDKMAN:https://sdkman.io/install,然后...
sdk install java 8.0.181-oracle
sdk install java 11.0.0-open
要切换:
sdk use java 8.0.181-oracle
切换到JDK 8 sdk use java 11.0.0-open
切换到JDK 11 要设置默认值:
sdk default java 8.0.181-oracle
的JDK 8 sdk default java 11.0.0-open
的JDK 11 答案 6 :(得分:0)
使用Homebrew和jenv:
假设:Mac机器上,您已经安装了自制软件。
安装酒桶:
$ brew tap caskroom/cask
$ brew tap caskroom/versions
要安装最新的Java:
$ brew cask install java
要安装Java 8:
$ brew cask install java8
要安装Java 9:
$ brew cask install java9
如果要安装/管理多个版本,则可以使用“ jenv”:
安装和配置jenv:
$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
将已安装的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
要查看所有已安装的java:
$ jenv versions
上面的命令将给出已安装的Java的列表:
* system (set by /Users/lyncean/.jenv/version)
1.8
1.8.0.202-ea
oracle64-1.8.0.202-ea
配置要使用的Java版本:
$ jenv global oracle64-1.6.0.39
答案 7 :(得分:0)
如果您的计算机上安装了多个版本,请在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)
并添加以下别名:
alias java7 ='export JAVA_HOME = $ JAVA_HOME_7'
alias java8 ='export JAVA_HOME = $ JAVA_HOME_8'
别名java9 ='export JAVA_HOME = $ JAVA_HOME_9'
并且可以使用别名切换到所需版本:
在终端中:
~ >> java7
export JAVA_HOME=$JAVA_7_HOME
答案 8 :(得分:0)
要保留特定的主要版本,请用brew tap激活AdoptOpenJDK tap,然后通过brew cask install安装所需版本:
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install <version>
要通过HotSpot安装AdoptOpenJDK 14,请运行:
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk14
答案 9 :(得分:0)
您可以通过任何方式安装 JDK 版本。
那么,我推荐使用JENV在不同版本之间切换,全局或本地使用你需要的JDK。
您可以在此处找到有关如何安装和使用 JENV 的更多详细信息 -> https://blog.adamgamboa.dev/2021/06/17/using-jenv-to-switch-jkd-versions/
答案 10 :(得分:-1)
恕我直言,无需安装所有其他应用程序/软件包。
使用以下命令检查可用版本:
> /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
现在,如果要在上面的列表中选择Azul JDK 8,而不是Oracle的Java SE 8,则调用以下命令:
> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
要选择Oracle的Java SE 8,您将调用以下命令:
> /usr/libexec/java_home -v 1.8.0_151
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
如您所见,提供的版本号应为唯一的字符串集:1.8.0_181与1.8.0_151