mar*_*ell 1160
首次运行/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
Run Code Online (Sandbox Code Playgroud)
选择您想要的默认版本(1.6.0_65-b14-462
为了参数),然后:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
Run Code Online (Sandbox Code Playgroud)
或者您只能指定主要版本,例如:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Run Code Online (Sandbox Code Playgroud)
现在,当你跑步时,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)
Run Code Online (Sandbox Code Playgroud)
只需将该export JAVA_HOME…
行添加到shell的init文件中即可.
Hug*_* M. 347
这个答案试图解决:如何在macOS El Capitan或更新版本(Sierra,High Sierra,Mojave)上安装多个版本的JDK以控制系统范围内的Java版本(不仅仅是当前运行的shell ).据我所知,目前的答案都没有(*).
作为开发人员,我使用了几个JDK,我想轻松地从一个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来说,它很酷而且全部,但据我所知它只是改变环境变量,因此它具有相同的限制.
Jus*_*ang 191
除了上面的答案,我在我的下面添加了以下几行,.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"
Run Code Online (Sandbox Code Playgroud)
插入后,执行 $ 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)
Run Code Online (Sandbox Code Playgroud)
小智 54
基于/ 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
Run Code Online (Sandbox Code Playgroud)
如果你不使用鱼,你可以在bash中做类似的事情:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
Run Code Online (Sandbox Code Playgroud)
然后在javas之间切换:
$> jhome #switches to latest java
$> jhome -v 1.7 #switches to java 1.7
$> jhome -v 1.6 #switches to java 1.6
Run Code Online (Sandbox Code Playgroud)
参考:https://gist.github.com/kenglxn/1843d552dff4d4233271
Yua*_*tao 30
使用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
Tre*_*ein 29
这有点棘手,但请尝试按照在OS X 10.9(Mavericks)上安装Java中描述的步骤进行操作.基本上,你必须更新你的别名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
Run Code Online (Sandbox Code Playgroud)
请注意,该目录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"
Run Code Online (Sandbox Code Playgroud)
您可以export JAVA_HOME
在.bashrc
文件中添加上面的行,以便永久地在终端中安装Java
小智 27
安装JDK,而不仅仅是JRE
/usr/libexec/java_home -v 1.8
Run Code Online (Sandbox Code Playgroud)
给
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)
下一个
touch .bash_profile
open -a TextEdit.app .bash_profile
Run Code Online (Sandbox Code Playgroud)
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)"
Run Code Online (Sandbox Code Playgroud)
尝试命令:
javac -version
应该输出:
javac 1.8.0_111
Run Code Online (Sandbox Code Playgroud)
dus*_*van 23
TL;博士
添加行:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
到文件
~/.bash_profile
替换为您下载的版本.
然后 source ~/.bash_profile
sla*_*lal 17
使用jenv,它就像一个Java环境管理器.它非常易于使用和清洁
对于Mac,请按照以下步骤操作:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Run Code Online (Sandbox Code Playgroud)
安装:如果您使用bash,请按照下列步骤操作:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
Run Code Online (Sandbox Code Playgroud)
将所需版本的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
Run Code Online (Sandbox Code Playgroud)
jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
检查已安装的版本:
jenv versions
Run Code Online (Sandbox Code Playgroud)
设置要使用的Java版本:
jenv global oracle64-1.6.0
Run Code Online (Sandbox Code Playgroud)
小智 12
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
}
Run Code Online (Sandbox Code Playgroud)
把这个在你的〜/ .profile文件,并用它在你的终端,像这样 setjdk 1.8
,setjdk 1.7
,setjdk 9
等等...
如果你没有removeFromPath
那么它是:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Joa*_*les 12
macOS El Capitan或更新版本将选择 JDK 中可用的更高版本/Library/Java/JavaVirtualMachines
,因此为了降级,您可以将文件重命名为Info.plist
其他类似名称,Info.plist.disabled
以便操作系统选择以前的版本。
Vis*_*ant 12
在您的中添加以下内容~/.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
Run Code Online (Sandbox Code Playgroud)
我正在使用 macOS 并使用brew
.
编辑:如果您没有使用,bash
请更新正确的 shell 文件,例如,如果您正在使用,zsh
那么它将是~/.zshrc
Abh*_*ale 12
跑步
/usr/libexec/java_home -V
Run Code Online (Sandbox Code Playgroud)
你将获得你拥有的所有java版本
例子:-
Matching Java Virtual Machines (3):
17.0.7 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
11.0.19 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/abhishek.khaiwale/Library/Java/JavaVirtualMachines/corretto-11.0.19/Contents/Home
11.0.19 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)
如果您需要java版本11.0.19
跑步
export JAVA_HOME=`/usr/libexec/java_home -v 11.0.19`
Run Code Online (Sandbox Code Playgroud)
Abb*_*ese 10
使用终端的四个简单步骤,适用于使用默认流程的人。.:)
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的家。Ami*_*gha 10
您可以将它添加到您的 .bash_profile 以默认设置版本。
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
我将分享我使用 macOS Big Sur v11.4 的经验,处理这些问题的最佳方法是使用 Homebrew 安装 java:
1 - 安装 Homebrew。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Run Code Online (Sandbox Code Playgroud)
2 - 安装 Homebrew Cask。
$ brew tap homebrew/cask-versions
$ brew update
$ brew tap homebrew/cask
Run Code Online (Sandbox Code Playgroud)
3 - 安装最新版本的 Java
$ brew cask install java
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
6 - 重新加载.bash_profile
或.zshrc
使别名生效:
$ source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
或者
$ source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)
7 - 最后,您可以使用别名在不同的 Java 版本之间切换。
$ java8
$ java -version
java version "1.8.0_261"
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以查看此帖子:如何在 Mac 上使用 Brew 安装 Java
别名 j='f(){ 导出 JAVA_HOME=
/usr/libexec/java_home -v $1
};f'
$ 源.zshrc
$ 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".
Run Code Online (Sandbox Code Playgroud)
检查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='导出 JAVA_HOME=$JAVA_8_HOME' 别名 java11='导出 JAVA_HOME=$JAVA_11_HOME'
源~/.bash_profile
当我们切换到 java11 或 java8 时,java -version 命令未显示正确的版本。
在这种情况下,使用 mvn -version 查看用于构建解决方案的正确 java 版本
由于无需安装其他工具,将单独安装的 JDK 识别为第一类成员的简单方法/usr/libexec/java_home -V
是将其符号链接如下:
sudo ln -s <path> /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Run Code Online (Sandbox Code Playgroud)
<path>
预计是一个包含子目录Contents/Home/bin
等的目录。
一个常见的用例是注册 Android Studio 附带的 JDK/JRE:
macOS 上最新版本的 Android Studio 中 Java 工具的默认位置是/Applications/Android\ Studio.app/Contents/jre
. 我们将使用jdk-android-studio.jdk
以下标识符:
sudo ln -s /Applications/Android\ Studio.app/Contents/jre /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
Run Code Online (Sandbox Code Playgroud)
现在,/usr/libexec/java_home -V
将其列出在Matching Java Virtual Machines
:
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
11.0.13 (arm64) "JetBrains s.r.o." - "OpenJDK 11.0.13" /Applications/Android Studio.app/Contents/jre/Contents/Home
/Applications/Android Studio.app/Contents/jre/Contents/Home
Run Code Online (Sandbox Code Playgroud)
在~/.zshenv
文件中添加以下命令
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Run Code Online (Sandbox Code Playgroud)
仅考虑以下方法来更改终端的每个特定选项卡的 JDK(即:)iTerm
。
在/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
Run Code Online (Sandbox Code Playgroud)
如果您Iterm
使用第一个选项卡 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)
Run Code Online (Sandbox Code Playgroud)
输出正确且符合预期
但是,如果您打开第二个Tab B并覆盖该 JDK,请执行以下操作:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
然后
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)
Run Code Online (Sandbox Code Playgroud)
它工作正常。当然,如果Tab B已关闭或您打开一个新的Tab C,则所有工作都根据.bash_profile
设置进行
来自Apple的官方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`
Run Code Online (Sandbox Code Playgroud)
首先找出你在哪里存储环境变量 -
设置环境变量的步骤:-
从JAVA下载jdk
双击安装
现在在您的文件中设置环境变量
一种。对于emacs.profile,您可以使用此链接或查看下面的屏幕截图
湾 对于 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)
Run Code Online (Sandbox Code Playgroud)
全部设置现在您可以轻松升级或降级JAVA版本..
以前我在 .zshrc 中使用别名以便在版本之间轻松切换,但今天我使用 SDKMAN。SDKMAN还可以处理为系统设置默认java,以及下载和安装新的java版本。
安装 sdkman 后,您就可以执行类似于使用 nvm 工具处理节点版本的命令。
sdk list 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
我已经改写了@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;
}
Run Code Online (Sandbox Code Playgroud)
$ 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)
Run Code Online (Sandbox Code Playgroud)
$ 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)
Run Code Online (Sandbox Code Playgroud)
小智 5
如果仍然无法设置。使用此命令。
导出JAVA_HOME =/usr/libexec/java_home -v 1.8
那你就得用这个
导出JAVA_HOME =$(/usr/libexec/java_home -v 1.8)
它肯定会工作。
归档时间: |
|
查看次数: |
509102 次 |
最近记录: |