首先运行 /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
这个答案试图解决:当在 macOS El Capitan 或更高版本(Sierra、High Sierra、Mojave)上安装多个版本的 JDK 以用于开发目的时,如何在系统范围内控制 Java 版本(不仅仅是在当前运行的 shell 中)。据我所知,当前的答案都没有做到这一点(*)。
作为一名开发人员,我使用了几个 JDK,我想轻松地从一个切换到另一个。通常我有最新的稳定版用于一般用途,其他的用于测试。但我不希望系统(例如,当我启动我的 IDE 时)使用我目前拥有的最新“抢先体验”版本。我想控制系统的默认值,那应该是最新稳定的。
以下方法至少适用于 Java 7 到 12(在撰写本文时是早期访问),适用于 Oracle JDK 或 OpenJDK(包括builds by AdoptOpenJDK produced after mid-October 2018)。
没有第三方工具的解决方案:
将所有 JDK 保留在 /Library/Java/JavaVirtualMachines 下的默认位置。系统默认选择最高版本。
要排除默认选择的 JDK,请将其 Contents/Info.plist 重命名为 Info.plist.disabled。当 $JAVA_HOME 指向 JDK 或在脚本或配置中显式引用时,该 JDK 仍然可以使用。它只会被系统的 java 命令忽略。
系统启动器将使用具有 Info.plist
文件的最高版本的 JDK。
在使用备用 JDK 的 shell 中工作时,请在现有答案(jenv
或围绕 /usr/libexec/java_home
的自定义别名/脚本等)中选择您的方法。
调查详情in this gist。
(*) 当前答案要么已过时(不再对 macOS El Capitan 或 Sierra 有效),要么仅针对单个 JDK,或者不针对系统范围的方面。许多人解释了如何更改 $JAVA_HOME
,但这只会影响当前的 shell 以及从那里启动的内容。它不会影响从操作系统启动器启动的应用程序(除非您更改正确的文件并注销/登录,这很乏味)。 jenv 也一样,它很酷,但据我所知,它只是改变了环境变量,所以它有同样的限制。
jenv
和 JAVA_HOME
都能够设置系统范围的 java 版本,即 Eclipse 将使用的那个。
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
。显然这是新的首选项窗格将启动的 - 这是我发现的唯一例外解决方案:那个东西仍将使用 JDK9(我安装的最新版本),但没有其他 Java 应用程序使用。”
除了上述答案之外,我还在我的 .bash_profile
(或 MacOS 10.15+ 的 .zshrc
)中添加了以下几行,这使得切换非常方便(包括@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
的 cli 工具来切换 Java 版本,但首字母缩略词 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
如果你不使用fish,你可以在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
参考:https://gist.github.com/kenglxn/1843d552dff4d4233271
export JAVA_HOME=(/usr/libexec/java_home $argv)
而不是 jhome
函数的第二行。
使用 jenv 是一种简单的方法。 (2022 年更新)
安装 jenv:请参阅使用 brew brew install openjdk@11 ln -s /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk #other java brew 安装 java install openjdk@8 brew install openjdk@17 添加java到jenv jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home 使用:参考jenv
这有点棘手,但请尝试按照 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"
您可以在 .bashrc
文件中添加上面的 export JAVA_HOME
行,以便在终端中永久保存 java
JAVA_HOME
将在当前终端会话中导出。如果需要,您可以将其添加到我们的 .bashrc
。我会将命令调整为最新版本。
安装 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
更新...
在 macOS Monterey 中,v12.0.1 Cask 不再是 Brew 命令。只需按照步骤操作,但在第 4 步中只需执行 $ brew install ...
或 $ brew install --cask ...
而不是 $ brew cask install ...
感谢 @Shivam Sahil 评论。
我将分享我使用 macOS Big Sur v11.4 的经验,处理这些问题的最佳方法是使用 Homebrew 安装 java:
1 - 安装自制软件。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2 - 安装 Homebrew Cask。
$ brew tap homebrew/cask-versions
$ brew update
$ brew tap homebrew/cask
3 - 安装最新版本的 Java
$ brew cask install java
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
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
6 - 重新加载 .bash_profile
或 .zshrc
以使别名生效:
$ source ~/.bash_profile
或者
$ source ~/.zshrc
7 - 最后,您可以使用别名在不同的 Java 版本之间切换。
$ java8
$ java -version
java version "1.8.0_261"
有关详细信息,您可以查看此帖子:How to Use Brew to Install Java on Mac
brew tap caskroom/cask Error: caskroom/cask was moved. Tap homebrew/cask instead.
brew cask install
不适用于较新的版本,请添加以下更新:brew install cask packageName
。参考文献L:stackoverflow.com/questions/30413621/…
brew install adoptopenjdk/openjdk/adoptopenjdk8
而不是 brew cask install adoptopenjdk8
tl;博士
添加行:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
到文件
~/.bash_profile
(将 jdk1.8.0_144.jdk 替换为您下载的版本)
然后source ~/.bash_profile
使用 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
对于使用默认进程的人来说,使用终端的四个简单步骤.. :)
echo $JAVA_HOME 为您提供当前的 java home。例如:/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 home..
macOS El Capitan 或更高版本将选择 /Library/Java/JavaVirtualMachines
中可用的更高版本的 JDK,因此为了降级,您可以将文件 Info.plist
重命名为 Info.plist.disabled
之类的其他名称,以便操作系统将选择以前的版本。
考虑以下方法仅为终端的每个特定选项卡(即:iTerm
)更改 JDK。
在 /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
如果您打开 Iterm
- 使用第一个 Tab 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)
输出正确且符合预期
但是,如果您打开第二个选项卡 B 并且需要覆盖默认 JDK,则在终端中写入以下内容:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH
然后
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)
它工作正常。当然,如果 Tab B 已关闭或您打开新的 Tab C,所有工作都根据 .bash_profile
设置(因此默认设置)
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:?;;") }
您可以将其添加到您的 .bash_profile 以默认设置版本。
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
将以下命令添加到 ~/.zshenv
文件
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
将以下代码行添加到您的 .zshrc(或 bash_profile)中:
别名 j='f(){ export JAVA_HOME=/usr/libexec/java_home -v $1 };f'
保存到会话:
$源.zshrc
运行命令(例如 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".
f:export: not valid in this context: -v
来自 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`
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;
}
切换到 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)
在您的 ~/.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
我正在使用 macOS 并使用 brew
安装了 java。
编辑:如果您没有使用 bash
,请更新正确的 shell 文件,例如,如果您使用的是 zsh
,那么它将是 ~/.zshrc
~/.zshrc
(或 zsh
终端),这是否意味着我应该输入 ~/.zprofile
java_home
将返回 default 版本(除非您包含 -F 标志)。所以这可能是一种误导!
.bash_profile
中设置这些变量,那么他们就会知道正在进行的更改,它不会自动发生。
如果仍然无法设置它。使用这个命令。
导出 JAVA_HOME=/usr/libexec/java_home -v 1.8
那么你必须使用这个。
导出 JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
它肯定会奏效。
首先找出你在哪里存储环境变量 -
emacs bash_profile zshrc 文件
设置环境变量的步骤:-
从 JAVA 下载 jdk 通过双击现在在您的文件中设置环境变量来安装它 a.对于 emacs.profile,您可以使用此链接或查看下面的屏幕截图
https://i.stack.imgur.com/rfOs1.png
湾。对于 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 版本..
如果您使用的是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
以前我在 .zshrc 中使用别名来轻松切换版本,但今天我使用 SDKMAN。 SDKMAN 还可以处理为系统设置默认java,以及下载和安装新的java 版本。
安装 sdkman 后,您可以执行类似于使用 nvm 工具处理节点版本的命令。
sdk list java
将列出您系统上可用的 Java 版本以及可在线安装的 Java 版本,包括您可以在 sdk use
、sdk default
和 sdk 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
基于@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
这是我在我的 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 版本定义变量。 eg _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11' _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8' # 默认版本目录,_E_JAVA_HOME_D=$_E_JAVA_HOME_8
在 ~/.bashrc 中,定义切换 Java 版本的命令。 eg ## 切换java版本,别名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" # 默认java版本,别名jvd="rm $ JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME" 别名 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时,我保留了次要版本,然后与主要版本建立了软链接,但没有次要版本。 eg // 这是实际的目录,jdk1.8.0_191 // 这是到 jdk1.8.0_191 jdk-8 的软链接 // 这是到 jdk-8 或 jdk-11 java 的软链接
我在 ~/.bashrc 中定义命令别名,但在单独的文件中定义变量。我正在使用~/.eric_var 来定义变量,并且~/.bashrc 将获取它(例如source $HOME/.eric_var)。
在 /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,您可以如上所述选择它。
将此函数添加到 bashrc 或 zshrc,java-change [version]
选择 JDK
# set and change java versions
function java-change() {
echo "----- old java version -----"
java -version
if [ $# -ne 0 ]; then
export JAVA_HOME=`/usr/libexec/java_home -v $@`
export PATH=$JAVA_HOME/bin:$PATH
fi
echo "----- new java version -----"
java -version
}
检查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='export JAVA_HOME=$JAVA_8_HOME' 别名 java11='export JAVA_HOME=$JAVA_11_HOME'
源〜/ .bash_profile
当我们切换到 java11 或 java8 时,java -version 命令没有显示正确的版本。
在这种情况下,使用 mvn -version 查看用于构建解决方案的正确 java 版本
export
行的反引号export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
- 另请注意,java_home 允许部分匹配,因此您不必包含完整版本,因为它会找到最新安装的。这使更新更容易。