如何在Mac上更改Java的默认版本?
首先运行/usr/libexec/java_home -V
,将会输出如下内容:
Matching Java Virtual Machines (3):
1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
选择你想要成为默认版本的版本(例如,1.6.0_65-b14-462
),然后执行以下步骤:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
或者您可以仅指定主要版本,例如:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
现在当您运行java -version
时,您将看到:
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
将export JAVA_HOME...
行添加到您的shell的init文件中。
对于Bash(由antonyh指定):export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
< p >对于鱼(如ormurin所述)< /p >set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
更新 .zshrc 文件应该可以解决:
nano ~/.zshrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)
按下CTRL+X退出编辑器 按Y保存更改
source ~/.zshrc
echo $JAVA_HOME
java -version
export
行。 - David Westexport JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
- 还要注意的是,java_home命令允许部分匹配,因此您不需要包含完整版本号,它会自动查找最新安装的版本。这样可以更轻松地更新。 - antonyh
而非 ' '。 - blizzard这篇回答旨在解决以下问题:如何在macOS El Capitan或更新版本(Sierra,High Sierra,Mojave)上安装多个JDK用于开发目的时,全局控制Java版本(不仅限于当前运行的shell)。据我所知,目前没有任何一个回答可以做到这一点。
作为开发人员,我使用多个JDK,并且希望能够轻松地切换。通常,我会有一个最新的稳定版本供一般使用,以及其他版本供测试使用。但是,我不希望系统(例如当我启动我的IDE时)使用我现在拥有的最新的“早期访问”版本。我想要控制系统的默认版本,应该是最新的稳定版本。
以下方法适用于至少Java 7到12(截至本文撰写时),包括Oracle JDK或OpenJDK(包括AdoptOpenJDK在2018年10月中旬之后发布的版本)。
/Library/Java/JavaVirtualMachines
下。系统会默认选择最高版本。Contents/Info.plist
重命名为Info.plist.disabled
。当$JAVA_HOME
指向该JDK或在脚本或配置中明确引用时,仍然可以使用该JDK。但是,系统的java
命令将忽略它。系统启动器将使用具有Info.plist
文件的最高版本的JDK。
在使用备选JDK的shell中工作时,可以从现有答案(jenv
或围绕/usr/libexec/java_home
的自定义别名/脚本)中选择方法。
调查细节在这个代码片段中。
(*) 当前的答案要么已经过时(不能用在macOS El Capitan或Sierra上),要么只适用于单个JDK,要么不涉及系统范围。许多解释如何更改$JAVA_HOME
,但这只影响当前shell和从那里启动的内容。它不会影响从OS launcher启动的应用程序(除非您更改正确的文件并注销/登录,这很繁琐)。对于jenv而言,虽然它很酷,但据我所知,它仅更改环境变量,因此具有相同的限制。
jenv
和 JAVA_HOME
都不能设置系统范围内的 Java 版本,也就是 Eclipse 将要使用的版本。 - Giovanni Lovato/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
。显然,这就是新首选项窗格将启动的插件——这是我发现解决方案唯一的例外:那个插件仍将使用JDK9(我安装的最新版本),但没有其他Java应用程序会这样做。” - Hugues M.除了以上的答案,我在我的.bash_profile
(或者对于MacOS 10.15+的.zshrc
)中添加了以下几行代码,这使得切换变得非常方便(包括@elektromin关于java 9的评论):
alias j20="export JAVA_HOME=`/usr/libexec/java_home -v 20`; java -version"
alias j19="export JAVA_HOME=`/usr/libexec/java_home -v 19`; java -version"
alias j18="export JAVA_HOME=`/usr/libexec/java_home -v 18`; java -version"
alias j17="export JAVA_HOME=`/usr/libexec/java_home -v 17`; java -version"
alias j16="export JAVA_HOME=`/usr/libexec/java_home -v 16`; java -version"
alias j15="export JAVA_HOME=`/usr/libexec/java_home -v 15`; java -version"
alias j14="export JAVA_HOME=`/usr/libexec/java_home -v 14`; java -version"
alias j13="export JAVA_HOME=`/usr/libexec/java_home -v 13`; java -version"
alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"
插入后,执行$ source .bash_profile
我可以通过输入以下内容切换到Java 8:
$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
该语法用于创建一个名为“j9”的别名,它将设置JAVA_HOME变量以指向Java 9,并输出Java版本信息。 - elektrominnvm
的命令行工具来切换 Java 版本,但是首字母缩写 jvm
已经有了其他的意思 :) - Andy/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
。 - cosbor11function jhome
set JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
如果您不使用 fish,您可以在 bash 中执行类似的操作:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
切换 Java 版本请执行以下命令:
$> jhome #switches to latest java
$> jhome -v 1.7 #switches to java 1.7
$> jhome -v 1.6 #switches to java 1.6
export JAVA_HOME=(/usr/libexec/java_home $argv)
代替你的jhome
函数的第二行。 - Daniel A.A. Pelsmaeker$ brew untap AdoptOpenJDK/openjdk
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install --cask temurin
$ brew tap homebrew/cask-versions
$ brew install --cask temurin8
$ brew install --cask temurin11
$ brew install --cask temurin17
$ brew install --cask temurin18
$ brew install --cask temurin19
$ brew install --cask temurin21
4 - 切换不同版本的Java
要在不同版本的Java之间切换,只需将以下内容添加到您的.bash_profile
或.zshrc
文件中。
在这种情况下,我们希望能够在Java8、Java11、Java17和Java21之间进行切换:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_17_HOME=$(/usr/libexec/java_home -v17)
export JAVA_18_HOME=$(/usr/libexec/java_home -v18)
export JAVA_19_HOME=$(/usr/libexec/java_home -v19)
export JAVA_21_HOME=$(/usr/libexec/java_home -v21)
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java17='export JAVA_HOME=$JAVA_17_HOME'
alias java18='export JAVA_HOME=$JAVA_18_HOME'
alias java19='export JAVA_HOME=$JAVA_19_HOME'
alias java21='export JAVA_HOME=$JAVA_21_HOME'
# default to Java 21
java21
.bash_profile
或 .zshrc
以使别名生效:$ source ~/.bash_profile
或者
$ source ~/.zshrc
$ java8
$ java -version
java version "1.8.0_261"
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew tap homebrew/cask-versions
$ brew update
$ brew tap homebrew/cask
$ brew cask install java
$ brew tap adoptopenjdk/openjdk
$ brew cask install adoptopenjdk8
$ brew cask install adoptopenjdk11
$ brew cask install adoptopenjdk13
$ brew cask install adoptopenjdk14
5 - 切换不同版本的Java
要在不同版本的Java之间切换,您只需要将以下内容添加到您的.bash_profile
或.zshrc
文件中。
在这种情况下,我们希望能够在Java8、Java11、Java13和Java14之间进行切换:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'
alias java14='export JAVA_HOME=$JAVA_14_HOME'
# default to Java 14
java14
.bash_profile
或 .zshrc
以使别名生效:$ source ~/.bash_profile
或者
$ source ~/.zshrc
$ java8
$ java -version
java version "1.8.0_261"
brew tap caskroom/cask Error: caskroom/cask was moved. Tap homebrew/cask instead.
- hafichukbrew cask install
无法使用于新版本,需更新为: brew install cask packageName
。参考链接:https://dev59.com/Ql0a5IYBdhLWcg3wYXq8 - Shivam Sahilbrew install adoptopenjdk/openjdk/adoptopenjdk8
而不是 brew cask install adoptopenjdk8
。 - Vlad Ralias java17='export JAVA_HOME=$JAVA_17_HOME && echo JAVA_HOME set to $JAVA_HOME'
- Bjørnar Hvidsten使用jenv是一种简单的方式。(更新于2022年)
安装jenv:请参见入门指南
使用brew安装Java
brew install openjdk@11
ln -s /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
#other java
brew install openjdk@8
brew install openjdk@17
将Java添加到jenv中
jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
使用:参考jenv
jenv
的方法已经有所不同了。请参考此链接:https://www.jenv.be/ - Munim安装JDK,而不仅仅是JRE
/usr/libexec/java_home -v 1.8
提供
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
下一个
touch .bash_profile
open -a TextEdit.app .bash_profile
TextEdit将显示一个空白页面,您可以填写。
添加到文档中:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
在终端中:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
尝试执行以下命令:
javac -version
应该会输出:
javac 1.8.0_111
虽然有点棘手,但请尝试按照在OS X 10.9(Mavericks)上安装Java所描述的步骤进行操作。基本上,你需要将别名更新为java
。
具体步骤如下:
安装JDK 1.7后,您需要执行sudo ln -snf
以更改链接到当前的java
。为此,请打开终端并输入以下命令:
sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
请注意,目录jdk1.7.0_51.jdk
可能会根据您安装的SDK版本而更改。
现在,您需要设置JAVA_HOME
以指向安装了jdk_1.7.0_xx.jdk
的位置。再次打开终端并输入:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
你可以在你的.bashrc
文件中添加export JAVA_HOME
行,以便永久地在终端中使用Java。
JAVA_HOME
将在当前终端会话中被导出。如果您希望,可以将其添加到我们的.bashrc
文件中。我将根据最新版本适配命令。 - Trein简述:在文件 ~/.bash_profile 中添加以下行:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
(将 jdk1.8.0_144.jdk 替换为您下载的版本)
然后运行命令 source ~/.bash_profile
使用jenv,它就像是一个Java环境管理器。它非常容易使用和干净。
对于Mac用户,按照以下步骤:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
安装:如果您正在使用bash,请按照以下步骤操作:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
将所需的JVM版本添加到jenv中:
jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
检查已安装的版本:
jenv versions
通过以下方式设置您想要使用的Java版本:
jenv global oracle64-1.6.0
/usr/libexec/java_home
命令会告诉你什么? - Bart