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

问题描述 投票:528回答:22

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

java macos
22个回答
993
投票

首先运行/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)

10
投票
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
}

把它放在你的〜/ .profile中,并在你的终端中使用它,如setjdk 1.8setjdk 1.7setjdk 9等等......

如果你没有removeFromPath那么它是:

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


5
投票

来自Apple的官方java_home(1) man page

**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`

5
投票

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

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

然后你必须使用这个。

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

它肯定会奏效。


4
投票

首先找出存储环境变量的位置 -

  1. emacs的
  2. 在.bash_profile
  3. zshrc文件

设置环境变量的步骤: -

  1. 从JAVA下载jdk
  2. 双击安装它
  3. 现在在文件中设置环境变量 一个。对于emacs.profile,您可以使用此link或参见下面的屏幕截图

enter image description here

湾对于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)

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


3
投票

JDK Switch Script

我已经调整了@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;
}

Switch to 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)

Switch to 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)

2
投票

如果你正在使用鱼并且你正在使用mac并且你希望能够在JDK之间切换,那么下面适用于mac。

@ kenglxn的回答对我不起作用,我发现它bcos没有设置-g这是全局的!

放在〜/ .config / fish / config.fish下面

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

2
投票

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

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

1
投票

如果您有多个版本,并且希望使用特定版本运行某些版本,请使用以下示例:

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar

1
投票

根据@markhellewell的回答,我创建了一些别名函数,可以帮到你。只需将这些添加到您的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; 
}

https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4


1
投票

/usr/libexec/java_home -V给出的列表中包含单独安装的JDK的简单方法是对目录进行符号链接,如下所示:

sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

例如,要注册Android Studio附带的JDK(撰写本文时为1.8.0_152),请使用:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk

现在java_home将在Matching Java Virtual Machines下列出JDK,你可以按照上面的描述选择它。


305
投票

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

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

以下方法至少使用Java 7到12(在撰写本文时的早期访问),使用Oracle JDK或OpenJDK(包括builds by AdoptOpenJDK produced after mid-October 2018)。

Solution without 3rd party tools:

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

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

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


调查详情in this gist


(*)当前的答案要么已过时(不再对macOS El Capitan或Sierra有效),要么只解决单个JDK,或者不解决系统范围问题。许多人解释了如何更改$JAVA_HOME,但这只会影响当前的shell以及从那里启动的内容。它不会影响从OS启动器启动的应用程序(除非您更改正确的文件和注销/登录,这是繁琐的)。同样对于jenv来说,它很酷而且全部,但据我所知它只是改变环境变量,因此它具有相同的限制。


0
投票

该工具将为您完成工作:

http://www.guigarage.com/2013/02/change-java-version-on-mac-os/

它是一个简单的JavaOne,可用于定义当前的Java版本。该版本可以在工具中选择版本后打开的shell中使用。


0
投票

以下是我在Linux(Ubuntu / Mint配对)上的操作方法,我猜Mac也可以这样做。


安装和配置

脚步:

  • [基础 - 部分]
  • 手动下载jdk(.tgz文件)。
  • 在适当的位置正确解压缩和重命名。 例如/mnt/star/program/java/jdk-1.8
  • 建立一个软链接,稍后将更改为切换java版本。 例如ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java 因此,/mnt/star/program/java/java是软链接。
  • 在启动脚本中设置JAVA_HOME。 可以使用像/etc/profile.d/eric.sh这样的文件,或者只使用~/.bashrc。 例如JAVA_HOME=/mnt/star/program/java/java
  • 然后打开一个新的bash shell。 java -version应该打印java版本。
  • [更多版本 - 部分]
  • 根据需要下载并安装更多Java版本,与上述步骤类似。 例如 /mnt/star/program/java/jdk-11
  • [开关 - 部分]
  • ~/.bashrc中,为各种Java版本定义变量。 例如 _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11' _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8' # dir of default version, _E_JAVA_HOME_D=$_E_JAVA_HOME_8
  • ~/.bashrc中,定义命令以切换Java版本。 例如 ## switch java version, alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME" alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME" # default java version, alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME" alias jv="java -version"
  • 在终端,source ~/.bashrc使更改生效。
  • 然后可以使用定义的命令进行切换。

命令 - 来自上面的配置

命令:

  • jv11 切换到Java 11
  • jv8 切换到Java 8
  • jvd 切换到默认Java版本,由上面定义的_E_JAVA_HOME_D表示。
  • jv 显示java版本。

示例输出:

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:~$ 

机制

  • 它通过改变软链接来切换,用作JAVA_HOME

提示

  • 在我的机器上手动安装jdk时,我保留次要版本,然后与主要版本进行软链接,但没有次要版本。 例如 //这是实际的目录, jdk1.8.0_191 //这是jdk1.8.0_191的软链接 jdk-8 //这是jdk-8jdk-11的软链接 java
  • 我在~/.bashrc中定义命令别名,但在单独的文件中定义变量。 我使用~/.eric_var来定义变量,~/.bashrc将使用它(例如source $HOME/.eric_var)。

-5
投票

太容易解决方案:真是令人头疼 - 这是一个对我有用的快速简便解决方案。

Mac OS Sierra版本10.12.13

  1. 使用快捷键:CMD + SHIFT + G - 键入“/ Library /”
  2. 找到JAVA文件夹
  3. 右键单击Java文件夹=移动到废纸篓(需要密码)
  4. 安装:Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Download Javascript SDK
  5. 确保新的JAVA文件夹出现在/ LIBRARY /
  6. 安装Eclipse | Install Eclipse IDE for Java Developers
  7. 繁荣完成

164
投票

除了上面的答案,我在.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"

插入后,执行$ 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)

50
投票

基于/ 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

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

#!/bin/bash

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

然后在javas之间切换:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

ref:https://gist.github.com/kenglxn/1843d552dff4d4233271


29
投票

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


26
投票

这有点棘手,但请尝试按照Installing Java on OS X 10.9 (Mavericks)中描述的步骤进行操作。基本上,你必须更新别名为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"

您可以在export JAVA_HOME文件中添加上面的.bashrc行,以便在您的终端中永久使用java


23
投票

安装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将显示一个空白页面,您可以填写。

添加到doc: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

14
投票

tl;博士

添加行:

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

到文件

~/.bash_profile

替换为您下载的版本。

然后source ~/.bash_profile


14
投票

使用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
© www.soinside.com 2019 - 2024. All rights reserved.