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文件中即可 .
30
这个答案试图解决:在 macOS El Capitan or newer (Sierra, High Sierra, Mojave) 上为了开发目的安装 several versions of JDK 时如何 control java version system-wide (不仅仅是在当前运行的shell中) . 据我所知,目前的答案都没有(*) .
To exclude a JDK from being picked by default, rename its Contents/Info.plist to Info.plist.disabled . 当 $JAVA_HOME 指向它或在脚本或配置中显式引用时,仍然可以使用该JDK . 它只会被系统的 java 命令忽略 .
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
}
**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`
$ 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)
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
如果你正在使用鱼并且你正在使用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
#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;
}
22 回答
首先运行
/usr/libexec/java_home -V
,它将输出如下内容:选择您想要成为默认版本的版本(参数为
1.6.0_65-b14-462
)然后:或者您只能指定主要版本,例如:
现在当你运行
java -version
时,你会看到:只需将
export JAVA_HOME…
行添加到shell的init文件中即可 .这个答案试图解决:在 macOS El Capitan or newer (Sierra, High Sierra, Mojave) 上为了开发目的安装 several versions of JDK 时如何 control java version system-wide (不仅仅是在当前运行的shell中) . 据我所知,目前的答案都没有(*) .
作为开发人员,我使用了几个JDK,我想轻松地从一个JDK切换到另一个 . 通常我有最新的稳定的一般用途,其他用于测试 . 但我不希望系统(例如,当我启动我的IDE时)使用我现在拥有的最新“早期访问”版本 . 我想控制系统的默认值,这应该是最新稳定的 .
以下方法至少与 Java 7 to 12 一起使用(在撰写本文时为早期访问),使用 Oracle JDK 或 OpenJDK (包括builds by AdoptOpenJDK produced after mid-October 2018) .
没有第三方工具的解决方案:
将所有JDK保留在
/Library/Java/JavaVirtualMachines
下的默认位置 . 系统默认选择最高版本 .To exclude a JDK from being picked by default, rename its Contents/Info.plist to 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以及从那里启动的内容 . 它赢得了很酷的全部,但据我所知它只是改变环境变量,所以它有同样的限制 .除了上面的答案,我在我的
.bash_profile
中添加了以下几行,这使得切换非常方便(包括@ elektromin对java 9的评论):插入后,执行
$ source .bash_profile
我可以通过键入以下内容切换到Java 8:
基于/ usr / libexec / java_home的小鱼函数
如果你不使用鱼,你可以在bash中做类似的事情:
然后在javas之间切换:
ref:https://gist.github.com/kenglxn/1843d552dff4d4233271
使用jenv是一种简单的方法 .
1.安装jenv
2.Config jenv
3.Symlink jdk路径
你们都准备好了
切换命令:
默认设置:
这有点棘手,但请尝试按照Installing Java on OS X 10.9 (Mavericks)中描述的步骤进行操作 . 基本上,您必须将别名更新为
java
.一步步:
安装JDK 1.7后,您需要执行
sudo ln -snf
才能将链接更改为当前java
. 为此,请打开终端并发出命令:请注意,目录
jdk1.7.0_51.jdk
可能会根据您安装的SDK版本而更改 .现在,您需要将
JAVA_HOME
设置为指向安装jdk_1.7.0_xx.jdk
的位置 . 再次打开终端并输入:您可以在
.bashrc
文件中添加上面的export JAVA_HOME
行,以便永久地在您的终端中安装Java安装JDK,而不仅仅是JRE
给
下一个
TextEdit将显示一个空白页面,您可以填写 .
添加到doc:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
在终端:
尝试命令:
javac -version
应该输出:
TL;博士
添加行:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
到文件
~/.bash_profile
替换为您下载的版本 .
然后
source ~/.bash_profile
把它放在你的〜/ .profile中并在你的终端中使用它,如
setjdk 1.8
,setjdk 1.7
,setjdk 9
等等......如果你没有
removeFromPath
那么它是:function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }
来自Apple的官方java_home(1) man page:
使用jenv,它就像一个Java环境管理器 . 它非常易于使用和清洁
对于Mac,请按照以下步骤操作:
安装:如果你使用bash跟着这些步骤:
将所需版本的JVM添加到jenv:
jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
检查已安装的版本:
设置要使用的Java版本:
如果你仍然无法设置它 . 使用此命令 .
export JAVA_HOME =
/usr/libexec/java_home -v 1.8
然后你必须使用这个 .
export JAVA_HOME =
$(/usr/libexec/java_home -v 1.8)
它肯定会奏效 .
JDK切换脚本
我已经调整了@Alex上面的答案,并编写了以下内容来修复Java 9的代码 .
切换到Java 8
切换到Java 9
首先找出存储环境变量的位置 -
emacs
bash_profile
zshrc文件
Steps to Set up the environment variable :-
从JAVA下载jdk
双击安装它
现在在文件中设置环境变量
一个 . 对于 emacs.profile ,您可以使用此link或参见下面的屏幕截图
b. For ZSH profile setup -
全部设置现在您可以轻松升级或降级JAVA版本..
如果你正在使用鱼并且你正在使用mac并且你希望能够在JDK之间切换,那么下面适用于mac .
@ kenglxn的答案对我不起作用,我发现它bcos没有设置-g这是全局的!
放在〜/ .config / fish / config.fish下面
要了解您已安装的版本/次要版本,您可以执行以下操作:
根据@markhellewell的回答,我创建了一些别名函数,可以帮到你 . 只需将这些添加到您的shell启动文件即可
https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4
在
/usr/libexec/java_home -V
给出的列表中包含单独安装的JDK的简单方法是对目录进行符号链接,如下所示:例如,要注册Android Studio附带的JDK(撰写本文时为1.8.0_152),请使用:
现在
java_home
将列出Matching Java Virtual Machines
下的JDK,您可以按上述方法选择它 .该工具将为您完成工作:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
它是一个简单的JavaOne,可用于定义当前的Java版本 . 该版本可以在工具中选择版本后打开的shell中使用 .
如果您有多个版本,并且希望使用特定版本运行某些版本,请使用以下示例:
这是我在 Linux (Ubuntu / Mint队友)上的表现,我想Mac也可以这样做 .
安装和配置
Steps:
[Basic - part]
手动下载jdk( .tgz 文件) .
在适当的位置正确解压缩和重命名 .
例如
/mnt/star/program/java/jdk-1.8
Build 一个软链接,稍后将更改为切换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版本 .[More version - part]
根据需要下载并安装更多Java版本,与上述步骤类似 .
例如
/mnt/star/program/java/jdk-11
[Switch - part]
在
~/.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
中,使用define命令切换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
使更改生效 .然后可以使用定义的命令进行切换 .
命令 - 来自上面的配置
Commands:
jv11
切换到Java 11
jv8
切换到Java 8
jvd
切换到默认Java版本,由上面定义的
_E_JAVA_HOME_D
表示 .jv
显示java版本 .
Example output:
机制
JAVA_HOME
.小贴士
例如
//这是实际的目录,
jdk1.8.0_191
//这是到
jdk1.8.0_191
的软链接jdk-8
//这是一个指向
jdk-8
或jdk-11
的软链接java
~/.bashrc
中定义命令别名,但在单独的文件中定义变量 .我使用
~/.eric_var
来定义变量,~/.bashrc
将它来源(例如source $HOME/.eric_var
) .将以下命令添加到
~/.zshenv
文件中太容易解决方案:真是令人头疼 - 这很快简单的解决方案对我有用 .
Mac OS Sierra版本10.12.13
使用快捷键:CMD SHIFT G - 键入“/ Library /”
找到JAVA文件夹
右键单击Java文件夹=移至废纸篓(需要密码)
安装:Java SE开发工具包8 jdk-8u131-macosx-x64.dmg | Download Javascript SDK
确保新的JAVA文件夹出现在/ LIBRARY /
安装Eclipse | Install Eclipse IDE for Java Developers
Boom完成