如何在macOS上设置或更改默认Java(JDK)版本?
如何在mac上更改Java的默认版本?这有点棘手,但请尝试按照中描述的步骤操作。基本上,您必须将别名更新为如何在macOS上设置或更改默认Java(JDK)版本?,java,macos,Java,Macos,如何在mac上更改Java的默认版本?这有点棘手,但请尝试按照中描述的步骤操作。基本上,您必须将别名更新为java 逐步: 安装JDK1.7后,您需要执行sudo ln-snf,以便将链接更改为当前java。为此,打开终端并发出以下命令: sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \ /System/Library/Frameworks/JavaVM.framework/Versions/Cur
java
逐步:
安装JDK1.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第一次运行/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
$ 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)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
javac -version
javac 11.0.9.1
java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH
选择要作为默认版本的版本(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\u HOME…
行添加到shell的init文件中
对于Bash(如所述):
鱼类(如ormurin所述)
更新.zshrc文件应该可以:
nano ~/.zshrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)
按CTRL+X退出编辑器
按Y键保存更改
source ~/.zshrc
echo $JAVA_HOME
java -version
此工具将为您完成以下工作: 它是一个简单的JavaOne,可以用来定义当前的Java版本。该版本可用于在工具中选择版本后打开的外壳中。来自苹果官方:
如果您有多个版本,并且希望使用特定版本运行某些内容,请使用以下示例:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
使用是一种简单的方法
cd ~/.jenv/candidates/
mkdir java
cd java
mkdir 1.7
mkdir 1.8
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8
jenv use java 1.8
设置默认值:
jenv default java 1.7
基于/usr/libexec/java_home的小型fish函数
function 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
参考:安装JDK,而不仅仅是JRE
/usr/libexec/java_home -v 1.8
给予
下一个
TextEdit将显示一个空白页,您可以填写该页
添加到文档:
export JAVA_HOME=/Library/JAVA/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/HOME
在终端:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
请尝试以下命令:
sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
javac-version
应输出:
javac 1.8.0_111
除了上面的答案,我在我的
.bash_profile
(或.zshrc
for MacOS 10.15+)中添加了以下几行,这使得切换非常方便(包括@elektromin对java 9的评论):
插入后,执行$source.bash\u profile
我可以通过键入以下命令切换到Java 8:
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
$ 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)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
javac -version
javac 11.0.9.1
java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH
基于@markhellewell answer,我创建了两个别名函数,可以为您实现这一点。只需将它们添加到shell启动文件中
#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
echo "Switching java version";
export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
java -version;
}
将其放入~/.profile中,并在终端中使用,如sosetjdk 1.8
、setjdk 1.7
、setjdk 9
等
如果没有removeFromPath
,则为:
函数removeFromPath(){
导出路径=$(echo$PATH | sed-E-E“s;:$1;;“-E”s;$1:?;”)
}
使用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
太简单的解决方案:多头痛啊——这是一个对我有效的快速简单的解决方案 Mac OS Sierra版本10.12.13
这个答案试图解决以下问题:当在macOS El Capitan或更新版本(Sierra、High Sierra、Mojave)上安装了用于开发目的的多个JDK版本时,如何控制系统范围内的java版本(不仅仅是在当前运行的shell中)。据我所知,目前没有一个答案是这样的(*) 作为一名开发人员,我使用了多个JDK,我希望能够轻松地从一个JDK切换到另一个JDK。通常我有最新的稳定的一个用于一般用途,其他用于测试。但我不希望系统(例如,当我启动IDE时)使用我目前拥有的最新“早期访问”版本。我想控制系统的默认值,这应该是最新的稳定值 以下方法至少适用于Java7到12(撰写本文时的早期访问),适用于OracleJDK或OpenJDK(包括) 无第三方工具的解决方案:
- 将所有JDK保留在它们的默认位置,在
下。默认情况下,系统将选择最高版本李>/Library/Java/JavaVirtualMachines
- 要在默认情况下排除JDK,请将其
重命名为Contents/Info.plist
。当Info.plist.disabled
指向JDK,或者在脚本或配置中显式引用JDK时,仍然可以使用该JDK。它将被系统的$JAVA_HOME
命令忽略java
Info.plist
文件的JDK中版本最高的JDK
在使用备用JDK的shell中工作时,从现有答案(jenv
)或/usr/libexec/java周围的自定义别名/脚本中选择您的方法
$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
alias j8="jhome -v 1.8.0_162"
alias j9="jhome -v 9.0.1"
function jhome
set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
funcsave jhome
/usr/libexec/java_home -V 579ms Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_162, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
2. source ~/.zshrc - Restart zshrc to reflect the changes.
3. echo $JAVA_HOME - make sure path is set up properly
----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
4. java -version
--> java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$
sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)
alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'
export JAVA_HOME=$JAVA_13_HOME
/Users/user/IDE/project $ j 1.8
/Users/user/IDE/project $ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)
/Users/user/IDE/project $ j 13
/Users/user/IDE/project $ java -version
openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
/Users/user/IDE/project $ j 1.7
Unable to find any JVMs matching version "1.7".
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
javac -version
javac 11.0.9.1
java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH
javac -version
javac 1.8.0_275
java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.275-b01, mixed mode)
function javav
set min_version 8
set max_version 99
set java_home_cmd '/usr/libexec/java_home 2>/dev/null --failfast --version'
if ! test (eval $java_home_cmd $argv)
echo "Version not found"
return 1
end
for current_version in (seq $min_version $max_version)
set path_to_remove (eval $java_home_cmd $current_version)
if ! test -z $path_to_remove
echo 'Removing' $path_to_remove 'from PATH'
set PATH (string match --invert $path_to_remove/bin $PATH)
end
end
echo 'Setting up env for Java' $argv
set -x JAVA_HOME (eval $java_home_cmd $argv)
set PATH $JAVA_HOME/bin $PATH
end
javav 11 # Sets to Java 11
javav 16 # Sets to Java 16