如何在macOS上设置或更改默认的Java(JDK)版本?

2022-08-31 03:57:21

如何在Mac上更改Java的默认版本?


答案 1

第一次运行,将输出如下内容:/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

答案 2

这个答案是试图解决:当在macOS El Capitan或更新版本(Sierra,High Sierra,Mojave)上安装多个版本的JDK用于开发目的时,如何在系统范围内控制java版本(不仅仅是在当前运行的shell中)。据我所知,目前的答案都没有这样做(*)。

作为一名开发人员,我使用多个JDK,并且我想轻松地从一个JDK切换到另一个JDK。通常我有最新的稳定版用于一般用途,其他用于测试。但是我不希望系统(例如,当我启动IDE时)使用我现在拥有的最新“抢先体验”版本。我想控制系统的默认值,这应该是最新的稳定。

以下方法至少适用于Java 7到12(在撰写本文时的早期访问),Oracle JDK或OpenJDK(包括2018年10月中旬之后生产的AdoptOpenJDK构建的构建)。

没有第三方工具的解决方案:

  • 将所有 JDK 保留在其默认位置,位于 下。默认情况下,系统将选择最高版本。/Library/Java/JavaVirtualMachines
  • 要从默认选择的 JDK 中排除,请将其 Contents/Info.plist 重命名为 Info.plist.disabled。该 JDK 在指向它时仍可使用,或在脚本或配置中显式引用。系统命令将简单地忽略它。$JAVA_HOMEjava

系统启动器将使用具有文件的JDK中版本最高的JDK。Info.plist

在具有备用 JDK 的 shell 中工作时,请在现有答案(或周围的自定义别名/脚本等)中选择您的方法。jenv/usr/libexec/java_home


本要点中的调查细节。


(*)目前的答案要么已经过时(不再适用于macOS El Capitan或Sierra),要么只解决单个JDK,要么不解决系统范围的方面。许多人解释了如何改变,但这只影响当前的shell和从那里启动的内容。它不会影响从操作系统启动器启动的应用程序(除非您更改正确的文件并注销/登录,这很乏味)。jenv也是如此,它很酷,但据我所知,它只是改变了环境变量,所以它具有相同的局限性。$JAVA_HOME