Answers:
第一次运行/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…
行添加到您的外壳的init文件中。
对于Bash(如antonyh所述):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
对于鱼类(如ormurin所述)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
线
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
还请注意,java_home允许部分匹配,因此您不必包括完整版本,因为它将找到最新安装的版本。这使更新更加容易。
这个答案是试图解决的问题:在macOS El Capitan或更高版本(Sierra,High Sierra,Mojave)上安装了几个JDK版本以进行开发时,如何控制系统范围内的Java版本(不仅仅是在当前运行的Shell中)。据我所知,目前的答案都没有(*)。
作为开发人员,我使用了多个JDK,并且希望轻松地从一个切换到另一个。通常,我有最新的稳定版供一般使用,其他则供测试使用。但是我不希望系统(例如,当我启动IDE时)使用目前拥有的最新“早期访问”版本。我想控制系统的默认值,并且应该保持最新状态。
以下方法至少适用于Java 7至12(在撰写本文时为早期访问),适用于Oracle JDK或OpenJDK(包括2018年10月中以后生产的AdoptOpenJDK构建)。
/Library/Java/JavaVirtualMachines
。系统默认会选择最高版本。 Contents/Info.plist
为Info.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将使用的版本。
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
。显然,这是新的“首选项”窗格将启动的那个-这是我在解决方案中发现的唯一例外: “ thingy仍将使用JDK9(我安装的最新版本),但其他Java应用程序则不会。”
除上述答案外,我在我的代码行中.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)
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"
然后键入j10
可以使您切换回当前版本的Java(在我的情况下为Java 10)
nvm
切换Java版本类似的cli工具,但是首字母缩写jvm
已经意味着其他含义了:)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
一个基于/ 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
export JAVA_HOME=(/usr/libexec/java_home $argv)
而不是jhome
函数的第二行。
这有点棘手,但是请尝试按照在OS X 10.9上安装Java(Mavericks)中描述的步骤进行操作。基本上,您必须将别名更新为java
。
一步步:
安装JDK 1.7之后,您需要执行sudo ln -snf
以便将链接更改为current 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
JAVA_HOME
将在当前终端会话中导出。您可以根据需要将其添加到我们的产品中.bashrc
。我将使命令适应最新版本。
使用jenv是一种简单的方法。
1.安装jenv
curl -s get.jenv.io | 重击
2.配置jenv
cd〜/ .jenv /候选人/ 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使用java 1.8
默认设置:
jenv默认java 1.7
安装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将显示一个空白页面,您可以填写。
添加到文档:
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
使用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
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:?;;")
}
使用终端的四个简单步骤,适用于使用默认流程的人。.:)
echo $JAVA_HOME
给您当前的Java主页。例如:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
会将您带到您通常安装jdks的文件夹中(您的计算机可能有所不同)
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的家。macOS El Capitan或更高版本将选择中提供的JDK的更高版本/Library/Java/JavaVirtualMachines
,因此为了降级,您可以将文件重命名为Info.plist
其他名称,Info.plist.disabled
以便OS选择较早的版本。
从苹果官方的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`
首先找出您将环境变量存储在哪里-
设置环境变量的步骤:-
现在在文件中设置环境变量
一个。对于emacs.profile,您可以使用此链接或查看下面的屏幕截图
b。对于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版本。
我已经改写了@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;
}
$ 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)
$ 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)
如果仍然无法设置。使用此命令。
导出JAVA_HOME =/usr/libexec/java_home -v 1.8
那你就得用这个
导出JAVA_HOME =$(/usr/libexec/java_home -v 1.8)
它肯定会工作。
您可以将其添加到.bash_profile中以默认设置版本。
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
如果您使用的是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
如果您有多个版本,并且想要使用特定版本来运行某些版本,请使用以下示例:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
基于@markhellewell的答案,我创建了几个别名函数将为您完成此操作。只需将它们添加到您的外壳启动文件中
#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
这是我在Linux (Ubuntu / Mint mate)上做的方法,我想Mac也可以做类似的事情。
脚步:
/mnt/star/program/java/jdk-1.8
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
java -version
应打印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
jv8
jvd
_E_JAVA_HOME_D
上面的定义表示。jv
输出示例:
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
定义变量,~/.bashrc
并将其作为源(例如source $HOME/.eric_var
)。
在给定的列表中包括一个单独安装的JDK的简单方法/usr/libexec/java_home -V
是按以下方式对目录进行符号链接:
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
将在下面列出JDK Matching Java Virtual Machines
,您可以如上所述选择它。
我已经为本地终端做了
export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)
alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'
export JAVA_HOME=$JAVA_13_HOME
该工具将为您完成工作:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
这是一个简单的JavaOne,可用于定义当前的Java版本。可以在工具中选择版本后打开的外壳中使用该版本。
太容易的解决方案:太令人头疼了-这是对我有用的快速简便的解决方案。
Mac OS Sierra版本10.12.13
使用快捷键:CMD + SHIFT + G-输入“ / Library /”
查找JAVA文件夹
右键单击Java文件夹=移至废纸((需要密码)
安装:Java SE开发套件8 jdk-8u131-macosx-x64.dmg | 下载Javascript SDK
/usr/libexec/java_home
告诉你什么?