Mac OS X和多个Java版本
如何在MacOS上安装额外的java?我安装了jdk8,效果很好。但是现在我需要一个jdk7安装用于开发目的。当试图通过DMG文件安装旧版本时,我得到一个警告,即已经安装了较新版本的java,安装程序将退出Mac OS X和多个Java版本,java,macos,multiple-versions,homebrew-cask,jenv,Java,Macos,Multiple Versions,Homebrew Cask,Jenv,如何在MacOS上安装额外的java?我安装了jdk8,效果很好。但是现在我需要一个jdk7安装用于开发目的。当试图通过DMG文件安装旧版本时,我得到一个警告,即已经安装了较新版本的java,安装程序将退出 /usr/libexec/java_home -verbose Matching Java Virtual Machines (1): 1.8.0_20, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0
/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
1.8.0_20, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
除此之外,如何安装jdk7
谢谢Dakky卸载jdk8,安装jdk7,然后重新安装jdk8 我在它们之间切换的方法(在.profile中): 然后,您只需在终端中键入
java7
或java8
,即可切换版本
(编辑:更新以添加Dylans对Java 9的改进)在Mac上管理多个Java版本最干净的方法是使用 在
自制中,使用:
自制桶
安装java版本
jenv
管理已安装的java版本
如图所示,以下是要遵循的步骤
安装自制软件
安装自制jenv
安装自制桶
使用cask安装特定的java版本(请参阅下面的“自制cask版本”一段)
为jenv添加此版本以管理它
检查jenv是否正确管理了该版本
对所需的每个java版本重复步骤4到6
自制木桶版本
使用以下方法将抽头添加到自制中:
brew tap homebrew/cask-versions
然后,您可以查看所有可用的版本:
brew search java
然后,您可以安装您喜欢的版本:
brew cask install java7
brew cask install java6
并像往常一样将其添加到jenv的管理中
jenv add <javaVersionPathHere>
jenv添加
我认为这是最干净、最简单的方法
另一个需要注意的重要事项,如中所述:
对于不同类型的JDK或安装,您将有不同的
路径
您可以使用/usr/libexec/java_home-V
检查安装版本的路径,请参阅
在Mac OS X Mavericks上,我发现如下:
1) 内置JRE默认值:/Library/Internet\
插件/JavaAppletPlugin.plugin/Contents/Home
2) 从Apple下载的jdk:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/
3) 从Oracle下载的jdk:/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
资源
- “brew水龙头”说明
- 对“brew版本”进行了解释和说明
- 与“brew版本”类似的“cask版本”,请参见和
我正在使用Mac OS X 10.9.5。当我需要一个版本来运行应用程序A,而使用另一个版本来运行应用程序B时,我就是这样在我的机器上管理多个JDK/JRE的
在获得一些联机帮助后,我创建了以下脚本
#!bin/sh
function setjdk() {
if [ $# -ne 0 ]; then
removeFromPath '/Library/Java/JavaVirtualMachines/'
if [ -n "${JAVA_HOME+x}" ]; then
removeFromPath $JAVA_HOME
fi
export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
fi
}
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk
我将上面的脚本放在.profile文件中。只需打开终端,键入vi.profile,用上面的代码片段附加脚本并保存。一旦您键入source.profile
,这将运行您的配置文件脚本,而无需重新启动终端。现在键入java-version
,它将显示1.7作为您的当前版本。如果打算将其更改为1.8,然后注释行setjdk jdk1.7.0_15.jdk
并取消注释行setjdk jdk1.8.0_60.jdk
。保存脚本并使用source命令再次运行。当我必须编译两个需要不同java版本的不同Maven项目时,我使用此机制来管理多个版本的jdk/JRE在这上面找到的
让我们从安装jEnv开始
在终端上运行这个
brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
将jEnv添加到bash概要文件
if which jenv > /dev/null; then eval "$(jenv init -)"; fi
当您第一次安装jEnv时,它将没有任何JDK与之关联
例如,我刚刚安装了JDK 8,但jEnv不知道
目前,它在系统上只找到Java版本(jre)。*
显示当前选择的版本。与rvm和rbenv不同,jEnv无法为您安装JDK。您需要从Oracle网站手动安装JDK
从苹果网站安装JDK 6。这将在/System/Library/Java/JavaVirtualMachines/
中安装Java。我们从苹果网站安装Java 6的原因是SUN没有为MAC开发JDK 6,所以苹果创建/修改了自己的部署版本
类似地安装JDK7和JDK8
将jdk添加到jEnv
JDK 6:
JDK 7:
JDK 8:
检查使用jenv安装的java版本
现在我们的系统上有3个Java版本
jenv local <jenv version>
检查java版本
java版本
就是这样。我们现在有多个java版本,可以轻松地在它们之间切换。jEnv还具有一些其他功能,如Gradle、Ant、Maven等的包装器,以及全局或本地设置JVM选项的能力。有关更多信息,请查看文档。jEnv on Mac Sierra:
如果安装后无法工作,请执行此错误修复,将java可执行文件添加到path
export PATH="$HOME/.jenv/shims:$PATH"
尽管eval“$(jenv init-”
可以完成这项工作。原因是/bin文件夹不再像主页中所描述的那样存在,而是将shim文件夹用作/bin
- 确保~/.詹夫在那里
哪个java
可以打印/Library/
- jenv全球1.8
- jenv shell 1.8
最终,哪种java
为您提供了:
/Users/xxxx/.jenv/chimes/java
我发现这个Java版本管理器最近调用过,它的用法与其他语言的版本管理器非常相似,比如rvm(ruby)、nvm(node)、pyenv(python)等等。而且它是跨平台的,因此可以在Mac上使用
安装后,它将在~/.jabba中创建一个dir,以放置您安装的所有Java版本
jenv local oracle64-1.6.0.65
export PATH="$HOME/.jenv/shims:$PATH"
curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh
# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically
jabba install 1.7 # "jabba use 1.7" will be called automatically
# list all installed JDK's
jabba ls
# switch to a different version of JDK
jabba use 1.8
$ sdk list java
Available Java Versions
+ 9ea170
> + 8u131
7u141-zulu
$ sdk install java 7u141-zulu
$ sdk use java 9ea170
brew install jenv
if which jenv > /dev/null; then eval "$(jenv init -)"; fi
export PATH="$HOME/.jenv/shims:$PATH"
brew tap caskroom/versions
brew cask install java
brew cask install java6
#brew cask install java7
#brew cask install java8
ls -la /Library/Java/JavaVirtualMachines
jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home
jenv versions
jenv global XX
java -version
jenv versions
jenv versions
jenv global XX
for version in 1.7 1.8; do
v="${version: -1}"
h=JAVA_"$v"_HOME
export "$h"=$(/usr/libexec/java_home -v $version)
alias "java$v"="export JAVA_HOME=\$$h"
done
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}
export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
jdk 9
jdk 11
jdk 13
cd /usr/local/Cellar/maven/3.5.4/bin/
nano mvn
--Update JAVA_HOME -> "${JAVA_HOME:-$(/usr/libexec/java_home)}"
mvn -version
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}
/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
11.0.1, x86_64: "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
1.8.0_201, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home
java -version
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`