mar*_*ell 1160

首次运行/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
Run Code Online (Sandbox Code Playgroud)

选择您想要的默认版本(1.6.0_65-b14-462为了参数),然后:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
Run Code Online (Sandbox Code Playgroud)

或者您只能指定主要版本,例如:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Run Code Online (Sandbox Code Playgroud)

现在,当你跑步时,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)
Run Code Online (Sandbox Code Playgroud)

只需将该export JAVA_HOME…行添加到shell的init文件中即可.

  • 这适用于Bash - `export JAVA_HOME = $(/ usr/libexec/java_home -v 1.8)` - 另请注意,java_home允许部分匹配,因此您不必包含完整版本,因为它会找到最新安装的版本.这使更新更容易. (59认同)
  • 确保你使用"不"来导出. (13认同)
  • 那些真的是"出口"线的反击 (11认同)
  • 这不适合我.从运行java_home -V中获取路径并将其添加到export命令,如此导出JAVA_HOME ="/ System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home" (4认同)
  • 不起作用。我运行了完全相同的步骤,但仍然看到 jdk 8 而不是“9.0.1”。 (3认同)
  • @ MattO'Brien取决于您正在使用的外壳以及您所拥有的配置,因此我无法为此提供完整的解决方案…… (2认同)
  • 给未来读者的提示是,只有当您在安装 Oracle 之前安装了 Apple 的 Java 时,此机制才有效,而这似乎是一种不太常见的情况。 (2认同)
  • 我希望每次我必须谷歌“os x switch java version”并回到这里时我都能投票 (2认同)

Hug*_* M. 347

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

作为开发人员,我使用了几个JDK,我想轻松地从一个JDK切换到另一个.通常我有最新的稳定的一般用途,其他用于测试.但我不希望系统(例如,当我启动我的IDE时)使用我现在拥有的最新"早期访问"版本.我想控制系统的默认值,这应该是最新稳定的.

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

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

  • 将所有JDK保留在其默认位置下/Library/Java/JavaVirtualMachines.系统默认选择最高版本.
  • 要排除默认情况下选择JDK,请将其重命名Contents/Info.plistInfo.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启动器启动的应用程序(除非您更改正确的文件和注销/登录,这是繁琐的).同样对于jenv来说,它很酷而且全部,但据我所知它只是改变环境变量,因此它具有相同的限制.

  • 这是我一直在寻找的答案,因为`jenv`和`JAVA_HOME`能够设置系统范围的java版本,即Eclipse将使用的版本. (16认同)
  • 完美的解决方案。应该标记为答案。 (5认同)
  • @Rodrigo是的,如"调查详情"(上面链接)中所述:"安装JDK也会覆盖`/ Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home /`.显然这是新的首选项窗格将启动 - 这是我在我的解决方案中找到的唯一例外:该东西仍将使用JDK9(我安装的最新版本),但没有其他Java应用程序可以." (2认同)
  • 值得注意的是,Java 版本位于 /Library/Java/JavaVirtualMachines 中,并且上述出色的工作解决方案就在该上下文中。 (2认同)
  • 确实,这是解决此问题的最佳方法,也是最实用的解决方案。不幸的是。 (2认同)
  • 我编写了一个脚本,使用您的方法使此过程变得更加容易!https://github.com/JoniVR/JavaVersionSwitcher (2认同)
  • 对于这个答案,我感激不尽。此修复了从OS启动器启动的应用程序。 (2认同)
  • 这是*正确*的答案。 (2认同)

Jus*_*ang 191

除了上面的答案,我在我的下面添加了以下几行,.bash_profile这样切换起来非常方便(包括@ elektromin对java 9的评论):

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"
Run Code Online (Sandbox Code Playgroud)

插入后,执行 $ 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)
Run Code Online (Sandbox Code Playgroud)

  • 这是Java 9的语法:```alias j9 ="export JAVA_HOME =`/ usr/libexec/java_home -v 9`; java -version"``` (5认同)
  • 很棒的简单别名,可快速切换。 (2认同)

小智 54

基于/ usr/libexec/java_home的小鱼函数

function jhome
    set JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end
Run Code Online (Sandbox Code Playgroud)

如果你不使用鱼,你可以在bash中做类似的事情:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home $@`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}
Run Code Online (Sandbox Code Playgroud)

然后在javas之间切换:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6
Run Code Online (Sandbox Code Playgroud)

参考:https://gist.github.com/kenglxn/1843d552dff4d4233271

  • 这仅针对特定的终端会话发生变化。有没有办法更新它以在系统范围内更改它? (2认同)

Yua*_*tao 30

使用jenv是一种简单的方法.

1.安装jenv

    curl -s get.jenv.io | bash

2.Config jenv

    cd ~/.jenv/candidates/
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8

3.Symlink jdk路径

    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使用java 1.8

默认设置:

jenv默认java 1.7

  • jenv 在工作时很好。但是建议不要使用它,因为它不会“真正”更改所使用的默认 Java 版本,通过运行命令“/usr/libexec/java_home -V”可以明显看出,只有 JAVA_HOME。这会导致某些应用程序出现奇怪的问题,例如 Eclipse。 (3认同)

Tre*_*ein 29

这有点棘手,但请尝试按照在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
Run Code Online (Sandbox Code Playgroud)

请注意,该目录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"
Run Code Online (Sandbox Code Playgroud)

您可以export JAVA_HOME.bashrc文件中添加上面的行,以便永久地在终端中安装Java

  • 这种方法对El Capitan/Sierra不起作用. (4认同)

小智 27

安装JDK,而不仅仅是JRE

/usr/libexec/java_home -v 1.8
Run Code Online (Sandbox Code Playgroud)

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

下一个

touch .bash_profile

open -a TextEdit.app .bash_profile
Run Code Online (Sandbox Code Playgroud)

TextEdit将显示一个空白页面,您可以填写.

添加到doc: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

在终端:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
Run Code Online (Sandbox Code Playgroud)

尝试命令:

javac -version

应该输出:

javac 1.8.0_111
Run Code Online (Sandbox Code Playgroud)


dus*_*van 23

TL;博士

添加行:

export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

到文件

~/.bash_profile

替换为您下载的版本.

然后 source ~/.bash_profile


sla*_*lal 17

使用jenv,它就像一个Java环境管理器.它非常易于使用和清洁

对于Mac,请按照以下步骤操作:

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Run Code Online (Sandbox Code Playgroud)

安装:如果您使用bash,请按照下列步骤操作:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $SHELL -l
Run Code Online (Sandbox Code Playgroud)

将所需版本的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
Run Code Online (Sandbox Code Playgroud)

jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

检查已安装的版本:

jenv versions
Run Code Online (Sandbox Code Playgroud)

设置要使用的Java版本:

jenv global oracle64-1.6.0
Run Code Online (Sandbox Code Playgroud)


小智 12

function setjdk() {
  if [ $# -ne 0 ]; then
    removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
    if [ -n "${JAVA_HOME+x}" ]; then
      removeFromPath $JAVA_HOME
    fi
    export JAVA_HOME=`/usr/libexec/java_home -v $@`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
}
Run Code Online (Sandbox Code Playgroud)

把这个在你的〜/ .profile文件,并用它在你的终端,像这样 setjdk 1.8,setjdk 1.7,setjdk 9等等...

如果你没有removeFromPath那么它是:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }


Joa*_*les 12

macOS El Capitan或更新版本将选择 JDK 中可用的更高版本/Library/Java/JavaVirtualMachines,因此为了降级,您可以将文件重命名为Info.plist其他类似名称,Info.plist.disabled以便操作系统选择以前的版本。


Vis*_*ant 12

在您的中添加以下内容~/.bash_profile并相应地设置默认的 java 版本。

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'

# default to Java 8
java8
Run Code Online (Sandbox Code Playgroud)

我正在使用 macOS 并使用brew.

编辑:如果您没有使用,bash请更新正确的 shell 文件,例如,如果您正在使用,zsh那么它将是~/.zshrc


Abh*_*ale 12

跑步

/usr/libexec/java_home -V
Run Code Online (Sandbox Code Playgroud)

你将获得你拥有的所有java版本

例子:-

Matching Java Virtual Machines (3):
    17.0.7 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
    11.0.19 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/abhishek.khaiwale/Library/Java/JavaVirtualMachines/corretto-11.0.19/Contents/Home
    11.0.19 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

如果您需要java版本11.0.19

跑步

export JAVA_HOME=`/usr/libexec/java_home -v 11.0.19`
Run Code Online (Sandbox Code Playgroud)

YouTube 视频链接


Abb*_*ese 10

使用终端的四个简单步骤,适用于使用默认流程的人。.:)

  1. echo $JAVA_HOME给您当前的Java主页。例如:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

  2. cd /Library/Java/JavaVirtualMachines/ 将带您到您通常安装jdks的文件夹中(您的计算机可能有所不同)

  3. ls显示可用的文件夹(通常这将有版本号,用于如:jdk1.8.0_191.jdk openjdk-11.0.2.jdk
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' 将改变java的家。


Ami*_*gha 10

您可以将它添加到您的 .bash_profile 以默认设置版本。

//Open bash profile
open ~/.bash_profile

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

// run bash profile
source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)


her*_*slm 9

我将分享我使用 macOS Big Sur v11.4 的经验,处理这些问题的最佳方法是使用 Homebrew 安装 java:

1 - 安装 Homebrew。

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Run Code Online (Sandbox Code Playgroud)

2 - 安装 Homebrew Cask。

$ brew tap homebrew/cask-versions 
$ brew update 
$ brew tap homebrew/cask
Run Code Online (Sandbox Code Playgroud)

3 - 安装最新版本的 Java

$ brew cask install java
Run Code Online (Sandbox Code Playgroud)

4 - 安装其他需要的 Java 版本(Java8、Java11、Java13)。

$ brew tap adoptopenjdk/openjdk

$ brew cask install adoptopenjdk8
$ brew cask install adoptopenjdk11
$ brew cask install adoptopenjdk13
$ brew cask install adoptopenjdk14
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

6 - 重新加载.bash_profile.zshrc使别名生效:

$ source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

或者

$ source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

7 - 最后,您可以使用别名在不同的 Java 版本之间切换。

$ java8
$ java -version
java version "1.8.0_261"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以查看此帖子:如何在 Mac 上使用 Brew 安装 Java


fei*_*awn 8

  1. 将以下代码行添加到您的.zshrc(或bash_profile):

别名 j='f(){ 导出 JAVA_HOME= /usr/libexec/java_home -v $1};f'

  1. 保存到会话:

$ 源.zshrc

  1. 运行命令(例如 j 13、j14、j1.8...)

$ j 1.8

说明 这是参数化的,因此您无需像发布的其他解决方案一样更新脚本。如果你没有安装 JVM,你会被告知。示例案例如下:

/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".
Run Code Online (Sandbox Code Playgroud)


Raj*_*ngh 8

检查Java版本:java -version

版本之间切换: https: //devqa.io/brew-install-java/

打开~/.bash_profile

导出 JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)

导出 JAVA_11_HOME=$(/usr/libexec/java_home -v11)

别名 java8='导出 JAVA_HOME=$JAVA_8_HOME' 别名 java11='导出 JAVA_HOME=$JAVA_11_HOME'

源~/.bash_profile

当我们切换到 java11 或 java8 时,java -version 命令未显示正确的版本。

在这种情况下,使用 mvn -version 查看用于构建解决方案的正确 java 版本


fri*_*mle 7

由于无需安装其他工具,将单独安装的 JDK 识别为第一类成员的简单方法/usr/libexec/java_home -V是将其符号链接如下:

sudo ln -s <path> /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Run Code Online (Sandbox Code Playgroud)

<path>预计是一个包含子目录Contents/Home/bin等的目录。


一个常见的用例是注册 Android Studio 附带的 JDK/JRE

macOS 上最新版本的 Android Studio 中 Java 工具的默认位置是/Applications/Android\ Studio.app/Contents/jre. 我们将使用jdk-android-studio.jdk以下标识符:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
Run Code Online (Sandbox Code Playgroud)

现在,/usr/libexec/java_home -V将其列出在Matching Java Virtual Machines

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    11.0.13 (arm64) "JetBrains s.r.o." - "OpenJDK 11.0.13" /Applications/Android Studio.app/Contents/jre/Contents/Home
/Applications/Android Studio.app/Contents/jre/Contents/Home
Run Code Online (Sandbox Code Playgroud)


xsi*_*n T 7

~/.zshenv文件中添加以下命令

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 
Run Code Online (Sandbox Code Playgroud)


Man*_*dan 7

考虑以下方法来更改终端的每个特定选项卡的 JDK(即:)iTerm

/Library/Java/JavaVirtualMachines路径中有以下两个 jdks

  • openjdk8u275-b01
  • openjdk-11.0.9.1+1

.bash_profile文件中如下:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

如果您Iterm使用第一个选项卡 A打开并执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

输出正确且符合预期

但是,如果您打开第二个Tab B并覆盖该 JDK,请执行以下操作:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

然后

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)
Run Code Online (Sandbox Code Playgroud)

它工作正常。当然,如果Tab B已关闭或您打开一个新的Tab C,则所有工作都根据.bash_profile设置进行


Ant*_*nio 6

来自Apple的官方java_home(1)手册页:

**USAGE**

   /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export JAVA_HOME=`/usr/libexec/java_home`

   Usage for csh-style shells:
          % setenv JAVA_HOME `/usr/libexec/java_home`
Run Code Online (Sandbox Code Playgroud)


Vru*_*aut 6

首先找出你在哪里存储环境变量 -

  1. 电子书
  2. bash_profile
  3. .zshrc 文件

设置环境变量的步骤:-

  1. 从JAVA下载jdk

  2. 双击安装

  3. 现在在您的文件中设置环境变量

    一种。对于emacs.profile,您可以使用此链接或查看下面的屏幕截图

在此处输入图片说明

湾 对于 ZSH 配置文件设置 -

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)
Run Code Online (Sandbox Code Playgroud)

全部设置现在您可以轻松升级或降级JAVA版本..


joe*_*son 6

以前我在 .zshrc 中使用别名以便在版本之间轻松切换,但今天我使用 SDKMAN。SDKMAN还可以处理为系统设置默认java,以及下载和安装新的java版本。

安装 sdkman 后,您就可以执行类似于使用 nvm 工具处理节点版本的命令。

sdk list java将列出您的系统上可用的以及可在线安装的 java 版本,包括您可以在sdk usesdk defaultsdk install命令中使用的标识符。

例如,要安装 Amazon Corretto 11.0.8 并询问它是否应该是新的默认值,请执行以下操作: sdk install java 11.0.8-amzn

我也经常使用的一个功能是.sdkmanrc文件。如果将其放置在计算机上的目录中并sdk env在该目录中运行命令,则可以配置仅在该目录中使用的工具版本。还可以使用sdkman_auto_env=true配置自动切换 sdkman 工具版本。

sdkman 还支持处理 JVM 的其他工具,例如 gradle、kotlin、maven 等。

有关更多信息,请查看https://sdkman.io/usage#env


Mar*_*les 5

JDK切换脚本

我已经改写了@Alex的回答,并编写了以下内容以修复Java 9的代码。

$ cat ~/.jdk
#!/bin/bash

#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 $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export JAVA_HOME=$(/usr/libexec/java_home -v $1);
  else
    export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
  fi

  echo "Setting JAVA_HOME=$JAVA_HOME"

  which java
  java -version;
}
Run Code Online (Sandbox Code Playgroud)

切换至Java 8

$ 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)
Run Code Online (Sandbox Code Playgroud)

切换至Java 9

$ 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)
Run Code Online (Sandbox Code Playgroud)


小智 5

如果仍然无法设置。使用此命令。

导出JAVA_HOME =/usr/libexec/java_home -v 1.8

那你就得用这个

导出JAVA_HOME =$(/usr/libexec/java_home -v 1.8)

它肯定会工作。