Mac OS X和多个Java版本

如何在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_20.jdk/Contents/Home


/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

除了这个,如何安装jdk7 ?

377912 次浏览

卸载jdk8,安装jdk7,然后重新安装jdk8。

我在它们之间切换的方法(在.profile中):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)


alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'


#default java8
export JAVA_HOME=$JAVA_8_HOME

然后,只需在终端中键入java7java8即可切换版本。

(编辑:更新为Java 9添加了dylan的改进)

在Mac上管理多个java版本最简洁的方法是使用Homebrew

Homebrew中,使用:

  • homebrew-cask来安装java版本
  • jenv来管理已安装的java版本

正如在http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html中看到的,以下是要遵循的步骤。

  1. 安装自酿酒
  2. 安装自制jenv
  3. 安装homebrew-cask
  4. 使用cask安装特定的Java版本(参见“homebrew-cask versions"下面的段落)
  5. 添加这个版本给jenv来管理它
  6. 检查版本是否由jenv正确管理
  7. 对于您需要的每个Java版本,重复步骤4到6

homebrew-cask版本

使用以下方法将homebrew/cask-versions按钮添加到自制程序:

brew tap homebrew/cask-versions

然后你可以查看所有可用的版本:

brew search java

然后你可以安装你喜欢的版本:

brew install --cask java7
brew install --cask java6

并像往常一样将它们添加到jenv管理。

jenv add <javaVersionPathHere>

我认为这是最干净的&这是最简单的方法。


另一件需要注意的重要事情,正如Mac OS X 10.6.7 Java Path当前JDK混乱中提到的:

对于不同类型的jdk或安装,您将有不同的 路径< / p >

你可以查看使用/usr/libexec/java_home -V安装的版本的路径,参见如何查看Mac上是否安装了Java JDK ?

在Mac OS X Mavericks上,我发现如下:

  1. 内置JRE默认值:/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

  2. 从Apple下载的JDKs: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

  3. 从Oracle下载的jdk: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


资源

我使用的是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命令再次运行它。当我必须编译2个需要不同java版本的不同Maven项目时,我使用这种机制来管理多个版本的JDK/JRE。

在这个网站上可以找到 让我们从安装jEnv

开始
  1. 在终端运行

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
    
  2. Add jEnv to the bash profile

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    
  3. When you first install jEnv will not have any JDK associated with it.

    For example, I just installed JDK 8 but jEnv does not know about it. To check Java versions on jEnv

    At the moment it only found Java version(jre) on the system. The * shows the version currently selected. Unlike rvm and rbenv, jEnv cannot install JDK for you. You need to install JDK manually from Oracle website.

  4. Install JDK 6 from Apple website. This will install Java in /System/Library/Java/JavaVirtualMachines/. The reason we are installing Java 6 from Apple website is that SUN did not come up with JDK 6 for MAC, so Apple created/modified its own deployment version.

  5. Similarly install JDK7 and JDK8.

  6. Add JDKs to jEnv.

    JDK 6:

    JDK 7: http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Check the java versions installed using jenv

    http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. So now we have 3 versions of Java on our system. To set a default version use the command

    jenv local <jenv version>
    

    我想用Jdk 1.6来启动IntelliJ

    jenv local oracle64-1.6.0.65
    
  9. check the java version

    java -version http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

That’s it. We now have multiple versions of java and we can switch between them easily. jEnv also has some other features, such as wrappers for Gradle, Ant, Maven, etc, and the ability to set JVM options globally or locally. Check out the documentation for more information.

Jenv谈Mac Sierra:

如果安装后无法工作,请执行此错误修复以将Java可执行文件添加到路径

export PATH="$HOME/.jenv/shims:$PATH"

尽管eval "$(jenv init -)"可以做这个工作。原因是/bin文件夹已经不存在了,就像在它的主页上描述的那样,但是shim文件夹被用作/bin。

  • Make sure ~/。Jenv在那里
  • which java可以打印/Library/…
  • Jenv global 1.8
  • Jenv外壳1.8

最终,which java会给你:

/用户/ xxxx / .jenv /垫片/ java

我最近发现这个名为的Java版本管理器,其用法与其他语言的版本管理器非常相似,如rvm(ruby)、nvm(node)、pyenv(python)等。而且它是跨平台的,所以肯定可以在Mac上使用。

安装完成后,它将在~/目录下创建一个目录。jabba来放置你安装的所有Java版本。它“支持安装Oracle JDK(默认)/ Server JRE, Zulu OpenJDK(自0.3.0起),IBM SDK, Java技术版(自0.6.0起)和自定义url。”

他们的Github上列出了基本用法。简单总结一下:

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

SDKMAN !是一个很好的工具,用于在Mac OS上使用多个版本的Java, Gradle, Groovy, Kotlin和其他JVM工具。安装和使用文档很容易在主站找到。

(我没有隶属关系,只是一个快乐的用户)。

作为一个使用示例,如果我在终端窗口中输入以下内容,会有一个可用的Java SDK版本列表(为简洁起见,经过编辑):

$ sdk list java
Available Java Versions
+ 9ea170
> + 8u131
7u141-zulu

这里+表示已安装的版本。>表示当前正在使用的版本。安装新版本:

$ sdk install java 7u141-zulu

要在此终端窗口中使用一个版本:

$ sdk use java 9ea170

macOS Sierra 420

这个指南是从各种来源(上面的回复和其他帖子)拼凑起来的,非常完美。

0. 如果还没有安装,请安装自制软件。

看到https://brew.sh/

1. 安装jenv

brew install jenv

2. 将jenv添加到bash配置文件中

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3.将jenv添加到您的路径

export PATH="$HOME/.jenv/shims:$PATH"

4. 利用“自制程序/ cask-versions"

供参考:“Tap"扩展brew的可用回购列表,它可以安装,高于和超出brew的默认可用回购列表。

brew tap homebrew/cask-versions

5. 安装最新版本的java

brew install java --cask

6. 安装java 6(或7或8)

brew install java6 --cask
#brew install java7 --cask
#brew install java8 --cask

? 也许关闭并重新启动终端,让它看到任何新的ENV变量已经设置。

7. 检查安装

所有Java版本都安装在这里:/Library/Java/JavaVirtualMachines让我们看看。

ls -la /Library/Java/JavaVirtualMachines

8. 每次将每个路径添加到jenv。

我们需要添加“;/Contents/Home"到版本文件夹。 警告:使用您机器上的实际路径…这些只是< /强> < >强例子

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. 检查jenv是否注册成功

jenv versions

10. 设置java版本使用(全局)

其中XX与上面版本列表中的一项匹配。

jenv global XX

检查java版本

java -version

检查jenv版本

还应该用星号表示正在使用的当前版本。

jenv versions

完成


未来快速参考

更改java版本

... 请参阅可用的java版本列表

jenv versions

... 然后,其中XX与上面列表中的一项匹配

jenv global XX

下面是一个更DRY的bash版本(基于Vegard的回答)

将1.7和1.8替换为您感兴趣的任何版本 你会得到一个叫'javaX'的别名;其中'X'是java版本(在下面的代码片段中为7 / 8),这将允许您轻松切换版本

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

与@Vegard(轻量级)的精神相同:

  • 用Homebrew安装所需的jdk
  • 将这个jdk bash函数和一个默认值放在你的.profile

    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
    
  • and then, to switch your jdk, you can do

     jdk 9
    jdk 11
    jdk 13
    

Based on https://github.com/AdoptOpenJDK/homebrew-openjdk.

为了安装最新版本的OpenJDK,我使用了这个。OpenJDK 14的示例:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

当前信息见https://github.com/AdoptOpenJDK/homebrew-openjdk

我遵循下面的步骤链接- https://medium.com/@euedofia/fix-default-java-version-on-maven-on-mac-os-x-156cf5930078,它为我工作。

cd /usr/local/Cellar/maven/3.5.4/bin/
nano mvn
--Update JAVA_HOME -> "${JAVA_HOME:-$(/usr/libexec/java_home)}"
mvn -version

我最近回答,我真的建议你使用SDKMAN而不是Homebrew。

使用SDKMAN,您可以轻松地在mac上安装不同版本的JAVA,并从一个版本切换到另一个版本。

Java in your mac

你也可以使用SDKMAN的ANT, GRADLE, KOTLIN, MAVEN, SCALA等…

要在你的mac上安装一个版本,你可以运行命令sdk install java 15.0.0.j9-adpt cmd < / p >

通过Homebrew安装Java的新命令:

  • brew cask install adoptopenjdk/openjdk/adoptopenjdk8
  • brew cask install adoptopenjdk/openjdk/adoptopenjdk11

有关最新的命令,请参阅homebrew-openjdk repo。

安装Java

您可以通过Homebrew、Jabba、SDKMAN或手动安装Java。有关所有命令的详细信息,请参见这个答案

切换Java版本 *

你可以用jenv Jabba, SDKMAN或手动切换Java版本。有关所有切换命令在这里的详细信息。

最好的解决方案

  • Jabba被设计为可以在多个平台上工作,所以如果您想要一个也能在Windows上工作的解决方案,它是一个不错的选择
  • 使用Homebrew下载Java版本,使用jenv切换版本提供了一个很好的工作流程。jenv可以很容易地使用存储在您机器上任何目录中的Java版本,因此如果您对将Java存储在非默认目录感兴趣,它是一个很好的替代方案。
  • 使用SDKMAN下载java和切换版本是另一个很好的选择
  • 应该避免手动切换,因为这是一个不必要的头痛。

命令用于手动切换Java版本

下面是Bash / ZSH函数,用于手动切换Java版本(通过OpenJDK):

jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}

有很多很棒的工具可以切换Java版本,所以我强烈建议不要手动切换。

使用jenv管理MAC中的多个java版本

  1. 使用以下命令安装自制程序

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    
  2. 安装jenv并激活jenv

    brew install jenv
    
    
    echo 'eval "$(jenv init -)"' >> ~/.bash_profile
    
  3. < p >利用cask-versions

    brew tap homebrew/cask-versions
    
  4. 搜索可用的可以安装的Java版本

    brew search java
    
  5. < p >。使用以下命令安装java6

    brew install cask java6
    
  6. 在jenv中添加多个版本的java

    jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
    
    
    jenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    

注意:-如果你得到类似ln: /Users/<username>/.jenv/versions/oracle64-1.8.0.231: No such file or directory的错误,那么执行以下命令:-

   mkdir -p /Users/<username>/.jenv/versions/oracle64-1.8.0.231
  1. 重新哈希jenv后添加jdk的

    jenv rehash
    
  2. 列出java到jenv的已知版本

    jenv versions
    
  3. 设置默认版本

    jenv global oracle64-1.8.0.231
    
  4. 更改项目的java版本

    jenv local oracle64-1.6.0.65
    
  5. 将JAVA_HOME设置为与jenv相同的版本

    jenv exec bash
    
    
    echo $JAVA_HOME
    
首先,您需要确保安装了多个JAVA版本。 打开一个新的终端窗口并输入:

/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

注意,有两个jdk可用。如果您没有注意到需要切换到的Java版本,请从这里下载并安装相应的版本https://www.oracle.com/java/technologies/downloads/ (JDK 8表示为1.8)。 一旦安装了合适的JDK,请重复此步骤

  1. 注意要切换到的JDK版本。例如,“11.0”和“1.8”是上面示例中可用的JDK版本。

  2. 切换到所需版本。例如,如果您希望切换到JDK 8,则输入如下一行:

    出口JAVA_HOME = /usr/libexec/java_home -v 1.8

< span span > < span span > < span span > < span span > < span span > > 4. 通过输入Terminal:

来检查JDK版本
java -version
如果您正确地遵循了所有步骤,那么JDK版本应该与您在最后一步中指定的版本相关联。 5. (可选)如果要设置为JDK的默认版本,在“Terminal”中输入如下内容:

open ~/.bash_profile

然后,将步骤3中的终端输入添加到这个文件中:

切换到Java版本8

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

保存并关闭文件。

这是一个很棒的教程 https://medium.com/@chamikakasun/how-to-manage-multiple-java-version-in-macos-e5421345f6d0 通过使用jEnv安装brew

或者你可以查看homebrew-openjdk https://github.com/AdoptOpenJDK/homebrew-openjdk管理版本使用brew点击

我知道这个问题已经有很多答案,但我只想分享我的解决方案,只使用Temurin和bash。

AdoptOpenJdk已弃用,这就是为什么我使用Temurin


使用镜像或包管理器下载Temurin

$ brew install --cask temurin

对于其他版本(如Java 8):

$ brew tap homebrew/cask-versions

$ brew install --cask temurin8


2.添加一个bash脚本到您的bash配置文件

打开你的~/.zshrc~/.bash_profile(取决于你在使用它)

并添加以下代码:

set-jdk() {
jdkversion=$1
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-"$jdkversion".jdk/Contents/Home;
export PATH=$PATH:$JAVA_HOME/bin;
java -version
}

重新启动你的终端,改变你的Java版本

__abc0n是你想要的Java版本,它已经安装了

< p >。 $ set-jdk 8更改为Java 8 / 1.8


一些注意事项:

  • 它将只在您使用set-jdk命令的终端会话上保留Java版本
  • 它不会将Java版本设置为全局
  • 当你想要将JAVA_HOME添加到另一个脚本/应用程序中时,你可以设置/Library/Java/JavaVirtualMachines/temurin-<version>.jdk/Contents/Home(更改为所需的Java版本。JD-GUI例子)

享受

要查找可用的Java版本:

brew search java

要安装最新的稳定版本(截至今天有19个):

brew info java
brew install java

为了让系统Java包装器(例如:ide)找到最新的JDK,可以将其与以下符号链接:

sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

安装特定版本(11):

brew install java11

对于系统,Java包装器查找JDK 11:

sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk

您可以在PATH中拥有其中一个OpenJDK版本。在~/.bash_profile中添加下列行之一

export PATH="/opt/homebrew/opt/openjdk/bin:$PATH
export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH

然后,

source ~/.bash_profile