如何在macOS上设置或更改默认的Java(JDK)版本?
如何在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)
将该行添加到 shell 的 init 文件中。export JAVA_HOME…
对于 Bash(如 antonyh 所述):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
对于鱼(如ormurin所述)
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
这个答案是试图解决:当在macOS El Capitan或更新版本(Sierra,High Sierra,Mojave)上安装多个版本的JDK用于开发目的时,如何在系统范围内控制java版本(不仅仅是在当前运行的shell中)。据我所知,目前的答案都没有这样做(*)。
作为一名开发人员,我使用多个JDK,并且我想轻松地从一个JDK切换到另一个JDK。通常我有最新的稳定版用于一般用途,其他用于测试。但是我不希望系统(例如,当我启动IDE时)使用我现在拥有的最新“抢先体验”版本。我想控制系统的默认值,这应该是最新的稳定。
以下方法至少适用于Java 7到12(在撰写本文时的早期访问),Oracle JDK或OpenJDK(包括2018年10月中旬之后生产的AdoptOpenJDK构建的构建)。
/Library/Java/JavaVirtualMachines
Contents/Info.plist
重命名为 Info.plist.disabled
。该 JDK 在指向它时仍可使用,或在脚本或配置中显式引用。系统命令将简单地忽略它。$JAVA_HOME
java
系统启动器将使用具有文件的JDK中版本最高的JDK。Info.plist
在具有备用 JDK 的 shell 中工作时,请在现有答案(或周围的自定义别名/脚本等)中选择您的方法。jenv
/usr/libexec/java_home
本要点中的调查细节。
(*)目前的答案要么已经过时(不再适用于macOS El Capitan或Sierra),要么只解决单个JDK,要么不解决系统范围的方面。许多人解释了如何改变,但这只影响当前的shell和从那里启动的内容。它不会影响从操作系统启动器启动的应用程序(除非您更改正确的文件并注销/登录,这很乏味)。jenv也是如此,它很酷,但据我所知,它只是改变了环境变量,所以它具有相同的局限性。$JAVA_HOME