如何在OSX上设置或更改默认的java(jdk)版本?

bz4sfanl  于 2021-07-03  发布在  Java
关注(0)|答案(23)|浏览(365)

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

bxjv4tth

bxjv4tth1#

第一次运行 /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的初始化文件。
对于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
xwbd5t1u

xwbd5t1u2#

macos el capitan或更新版本将选择更高版本的jdk /Library/Java/JavaVirtualMachines ,因此为了降级,您可以重命名该文件 Info.plist 像这样的事情 Info.plist.disabled 以便操作系统选择以前的版本。

ndh0cuux

ndh0cuux3#

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

向jenv添加所需的jvm版本:

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
iih3973s

iih3973s4#

加上以上的答案,我把以下几行放在我的字典里 .bash_profile (或 .zshrc 对于macos 10.15+,这使得切换非常方便(包括@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)
lztngnrs

lztngnrs5#

将以下代码行添加到.zshrc(或bash\u配置文件)中:
别名j='f(){导出java\u主页= /usr/libexec/java_home -v $1 };f'
保存到会话:
$来源.zshrc
运行命令(例如j 13、j14、j1.8…)
18亿日元
解释这是参数化的,所以您不需要像发布的其他解决方案那样更新脚本。如果没有安装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".
r6l8ljro

r6l8ljro6#

jdk开关脚本

我已经修改了上面@alex的答案,并编写了以下内容来修复java9的代码。

$ 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;
}

切换到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)

切换到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)
mm9b1k5b

mm9b1k5b7#

热释光;博士
添加行: export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home' 到文件 ~/.bash_profile (用下载的版本替换jdk1.8.0144.jdk)
那么 source ~/.bash_profile

3yhwsihp

3yhwsihp8#

使用jenv是一种简单的方法。
1.安装jenv

curl -s get.jenv.io | bash

2.2.5杰夫

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

3.符号链接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

4.你都准备好了
开关命令:
jenv使用java1.8
设置默认值:
JANV默认java 1.7

sczxawaw

sczxawaw9#

为使用默认流程的用户使用终端的四个简单步骤:) echo $JAVA_HOME 提供当前java主页。例如:
/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/ cd /Library/Java/JavaVirtualMachines/ 将带您到通常安装jdk的文件夹(对于您的计算机可能不同) ls 显示可用文件夹(通常有版本号,例如: jdk1.8.0_191.jdk openjdk-11.0.2.jdk ) export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' 将更改java主页。。

cigdeys3

cigdeys310#

下面是我在linux(ubuntu/mint-mate)上的实现方式,我想mac也可以这样做。

安装配置(&C)

步骤:
[基本-部分]
手工下载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-8 或者
jdk-11 java 我在中定义命令别名 ~/.bashrc ,但在单独的文件中定义变量。
我正在使用 ~/.eric_var 定义变量

2eafrhcq

2eafrhcq11#

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.8 , setjdk 1.7 , setjdk 9 等等。。。
如果你没有 removeFromPath 那就是: function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

ftf50wuq

ftf50wuq12#

一个基于/usr/libexec/java的小型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

裁判:https://gist.github.com/kenglxn/1843d552dff4d4233271

syqv5f0l

syqv5f0l13#

如果您使用的是fish和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
oug3syen

oug3syen14#

这有点棘手,但请尝试遵循在OSX10.9(mavericks)上安装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/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永久地保存在您的终端中

izj3ouym

izj3ouym15#

您可以将其添加到.bash\u配置文件中,以在默认情况下设置版本。

//Open bash profile
open ~/.bash_profile

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

// run bash profile
source ~/.bash_profile

相关问题