代码之家  ›  专栏  ›  技术社区  ›  Jayson Minard

如何在Mac OSX上安装Java以允许版本切换?

  •  113
  • Jayson Minard  · 技术社区  · 6 年前

    我想在macosx上安装openjdkjava,并让它与其他JDK一起工作,因为它是一个较新的版本。目前,我下载了tar.gz并将其放在我的路径中,但这很难维护。

    我发现的另一个能自动完成更多任务的安装是通过自制木桶进行的安装。看起来也只有当前版本:

    brew cask info java
    

    显示:

    爪哇:13,33:5b8a42f3905b406298b72d750b6919f6
    https://openjdk.java.net/

    所以我可以从那里安装它,然后呢?我是不是只有新版本?

    5 回复  |  直到 4 年前
        1
  •  898
  •   Jayson Minard    4 年前

    这些解决方案适用于各种版本的Java,包括java8到java15,甚至新的java16。这包括来自OpenJDK、Oracle、IBM、Azul、Amazon Correto、Graal等的替代JDK。轻松使用Java 7、Java 8、Java 9、Java 10、Java 11、Java 12、Java 13、Java 14、Java 15和Java 16!

    对于如何进行安装以及管理JDK交换,您有几个选项。安装可以通过自制完成, SDKMAN Jabba ,或手动安装。切换可以通过 JEnv , 斯德克曼 , 贾巴 ,或通过设置 JAVA_HOME . 所有这些都在下面描述。


    首先,使用您喜欢的任何方法安装Java,包括自制、SDKMAN或手动安装tar.gz文件。手动安装的优点是JDK的位置可以放置在macosx的标准位置。否则,还有一些更简单的选项,比如SDKMAN,它还将为JVM安装其他重要和通用的工具。

    SDKMAN 有点不同,它同时处理安装和切换。SDKMAN还将已安装的JDK放入自己的目录树中,这通常是 ~/.sdkman/candidates/java . SDKMAN允许设置全局默认版本,以及特定于当前shell的版本。

    1. https://sdkman.io/install

    2. 列出可用的Java版本以确保您知道版本ID

      sdk list java
      
    3. 安装其中一个版本,例如Java 16:

      sdk install java 16-open 
      
    4. sdk default java 16-open
      

      或将当前终端会话切换到16:

      sdk use java 16-open
      

    当您使用list命令列出可用的安装版本时,您将看到各种各样的Java发行版:

    并安装其他版本,如来自Amazon的JDK 11:

    sdk install java 11.0.10.9.1-amzn
    

    sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
    

    自由使用:

    sdk use java my-local-13
    

    更多信息请参见 SDKMAN Usage Guide 随着 other SDK's 它可以安装和管理。

    SDKMAN将自动管理您的 PATH 为您更改版本。


    1. 从下载OpenJDK for Mac OSX http://jdk.java.net/ (例如 Java 16 )

    2. 取消OpenJDK tar的归档,并放置生成的文件夹(即。 jdk-16.jdk /Library/Java/JavaVirtualMachines/ 文件夹,因为这是JDK安装的标准和预期位置。您也可以安装在任何地方,你想在现实中。

    3. 爪哇岛之家 环境变量,指向未归档JDK的方向。

    specific to manual installation

    使用自制软件安装

    1. install Homebrew 如果你还没有。确保已更新:

       brew update
      
    2. 如果你想用木桶龙头 AdoptOpenJDK

       brew tap adoptopenjdk/openjdk
      

      这些容器经常更改它们的Java版本,而且可能还有其他的tap和其他Java版本。

    3.  brew search java   
      

      或者对于OpenJDK版本:

       brew search jdk     
      
    4.  brew info java
      

      或者对于OpenJDK版本:

       brew info adoptopenjdk
      
    5. java11 , adoptopenjdk8 , adoptopenjdk11 , adoptopenjdk16 java adoptopenjdk 最新的分布。例如:

       brew install java
      
       brew install --cask adoptopenjdk16
      

    这些将被安装到 这是Mac OSX上的传统位置。

    其他安装选项:

    OpenJDK的其他一些风味包括:

    Azul Systems OpenJDK的认证版本可以通过以下步骤安装 instructions on their site .

    Amazon Correto

    amazoncoretto是一个开放Java开发工具包(OpenJDK)的免费、多平台、可生产的发行版。Corretto提供长期支持,包括性能增强和安全修复。Amazon在内部运行Corretto的数千个生产服务,Corretto被认证为与javase标准兼容。使用Corretto,您可以在流行的操作系统(包括Linux、Windows和macOS)上开发和运行Java应用程序。


    我的JDK在哪?!?!

    要查找以前安装的Java JDK在默认系统位置的位置,请使用:

    /usr/libexec/java_home -V
    

    匹配Java虚拟机(8):
    16,x86_:“AdoptOpenJDK 16”/库/Java/JavaVirtualMachines/AdoptOpenJDK-16.jdk/Contents/Home 14,x86_64:“OpenJDK 14”/库/Java/JavaVirtualMachines/jdk-14.jdk/Contents/Home

    10.0.2,x86_:“Java SE 10.0.2”/库/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
    9,x86_64:“javase9”/库/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
    1.8.0_144,x86_64:“Java SE 8”/库/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

    您还可以使用 -v

    /usr/libexec/java_home -v 16
    

    /Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home

    如果需要查找其他工具安装的JDK,请检查以下位置:

    • ~/.sdkman/candidates/java/
    • Jabba安装到 ~/.jabba/jdk

    手动切换版本

    爪哇岛之家 ,所以您可以更改它来更改正在使用的JDK。

    例如,如果您安装或卸载JDK16 /Library/Java/JavaVirtualMachines/jdk-16.jdk 如果它是最高版本号,它应该已经是默认值,如果不是,您可以简单地设置:

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
    

    现在,路径中的任何Java可执行文件都将看到这一点并使用正确的JDK。

    使用 /usr/libexec/java_home 如前所述,该实用程序通过标识不同JDK安装的位置,帮助您创建别名或运行命令来更改Java版本。例如,在 .profile .bash_profile 改变 爪哇岛之家 为你:

    export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
    export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
    export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
    export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
    export JAVA_12_HOME=$(/usr/libexec/java_home -v12)
    export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
    export JAVA_14_HOME=$(/usr/libexec/java_home -v14)
    export JAVA_15_HOME=$(/usr/libexec/java_home -v15)
    export JAVA_16_HOME=$(/usr/libexec/java_home -v16)
    
    alias java8='export JAVA_HOME=$JAVA_8_HOME'
    alias java9='export JAVA_HOME=$JAVA_9_HOME'
    alias java10='export JAVA_HOME=$JAVA_10_HOME'
    alias java11='export JAVA_HOME=$JAVA_11_HOME'
    alias java12='export JAVA_HOME=$JAVA_12_HOME'
    alias java13='export JAVA_HOME=$JAVA_13_HOME'
    alias java14='export JAVA_HOME=$JAVA_14_HOME'
    alias java15='export JAVA_HOME=$JAVA_15_HOME'
    alias java16='export JAVA_HOME=$JAVA_16_HOME'
    
    # default to Java 16
    java16
    

    java8
    java -version
    

    java版本“1.8.0\U 144”

    当然,设置 爪哇岛之家 手动也可以!


    与JEnv切换版本

    JEnv /库/Java/JavaVirtualMachines/ . JEnv允许设置Java的全局版本,一个用于当前shell,另一个用于每个目录的本地版本,这在某些项目需要不同的版本时非常方便。

    1. http://www.jenv.be/ 用于手动安装或使用自制软件。

    2. 向JEnv添加任何Java版本( 如果你把它放在别处,请调整目录 ):

      jenv add /Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
      
    3. jenv global 16
      

    jenv add 以类似的方式,列出可用的。例如Java 8:

    jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home 
    jenv versions
    

    看到了吗 JEnv docs 获取更多命令。您现在可以随时在整个系统、shell或每个本地目录的任何Java版本(Oracle、OpenJDK、other)之间切换。

    帮助管理 使用JEnv时,可以添加 export plugin 为你做这件事。

    $ jenv enable-plugin export
      You may restart your session to activate jenv export plugin echo export plugin activated
    

    导出插件可能无法调整 爪哇岛之家 如果已经设置了,那么您可能需要清除配置文件中的这个变量,以便JEnv可以管理它。

    你也可以使用 jenv exec <command> <parms...> 运行单个命令的步骤 爪哇岛之家 路径


    Jabba ~/.jabba/jdk .

    1. 按照以下步骤安装Jabba instructions on the home page

    2. 列出可用的JDK

      贾巴ls遥控器

    3. 使用它:

      贾巴语使用openjdk@1.12.0

    usage guide 也可以在主页上找到。

    路径 为您更改版本。

        2
  •  19
  •   Kaan Burak Sener    4 年前

    我就是这样做的。

    第一步: 安装Java 11

    https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

    第二步: 安装Java11之后。确认所有版本的安装。在终端中键入以下命令。

    /usr/libexec/java_home -V
    

    第三步: 编辑.bash\u配置文件

    sudo nano ~/.bash_profile
    

    添加11.0.1作为默认值(将下面的行添加到bash文件中)。

    export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)
    

    切换到任何版本

    export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)
    

    现在按CTRL+X退出bash。按“Y”保存更改。

    重新加载bash\u配置文件

    source ~/.bash_profile
    

    第6步: 确认Java的当前版本

    java -version
    
        3
  •  10
  •   Hugues M.    6 年前

    不使用第三方工具手动切换系统默认版本:

    this older answer ,在macOS上 /usr/bin/java 是一个包装工具,它将使用 JAVA_HOME /Library/Java/JavaVirtualMachines/ 将使用最高版本的。它通过查看 Contents/Info.plist

    掌握了这些知识,您可以:

    • 通过重命名控制系统将使用的版本 Info.plist 在您不希望用作默认值的版本中(实际Java运行时本身不使用该文件)。
    • $JAVA_HOME

    我刚刚用OpenJDK&验证了这一点;莫哈韦。

    在全新系统上,没有安装Java版本:

    $ java -version
    No Java runtime present, requesting install.
    

    取消此操作,下载OpenJDK 11&12个打开 https://jdk.java.net ; 安装OpenJDK11:

    $ cd /Library/Java/JavaVirtualMachines/
    $ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz
    

    $ java -version
    openjdk version "11.0.1" 2018-10-16
    [...]
    

    $ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz 
    

    java系统现在是12:

    $ java -version
    openjdk version "12-ea" 2019-03-19
    [...]
    

    $ cd jdk-12.jdk/Contents/
    $ sudo mv Info.plist Info.plist.disabled
    

    java系统回到11:

    $java-版本
    openjdk版本“11.0.1”2018-10-16
    

    您仍然可以通过手动设置来准时使用版本12 爪哇岛之家

    $ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
    $ java -version
    openjdk version "12-ea" 2019-03-19
    [...]
    
        4
  •  7
  •   Lyncean Patel    5 年前

    使用自制和jenv:

    安装容器:

    $ brew tap caskroom/cask
    $ brew tap caskroom/versions
    

    要安装最新的java:

    $ brew cask install java
    

    要安装java 8:

    $ brew cask install java8
    

    $ brew cask install java9
    

    如果要安装/管理多个版本,则可以使用“jenv”:

    安装和配置jenv:

    $ brew install jenv
    $ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
    $ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
    $ source ~/.bash_profile
    

    $ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
    $ jenv add /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/Contents/Home
    

    要查看所有已安装的java:

    $ jenv versions
    

    * system (set by /Users/lyncean/.jenv/version)
    1.8
    1.8.0.202-ea
    oracle64-1.8.0.202-ea
    

    配置要使用的java版本:

    $ jenv global oracle64-1.6.0.39
    
        5
  •  6
  •   Lyncean Patel    5 年前

    如果您的计算机上安装了多个版本,请在bash概要文件中添加以下内容:

    export JAVA\u HOME\u 9=$(/usr/libexec/JAVA\u HOME-v9)

    并添加以下别名:

    alias java7='export JAVA\u HOME=$JAVA\u HOME\u 7'

    alias java8='export JAVA\u HOME=$JAVA\u HOME\u 8'

    alias java9='export JAVA\u HOME=$JAVA\u HOME\u 9'

    ~ >> java7 export JAVA_HOME=$JAVA_7_HOME

        6
  •  3
  •   Jayson Minard    6 年前

    另一种选择是使用 SDKMAN ! 看到了吗 https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/

    首先安装SDKMAN: https://sdkman.io/install 然后。。。

    1. 安装Oracle JDK 8时使用: sdk install java 8.0.181-oracle
    2. 安装OpenJDK 11时使用: sdk install java 11.0.0-open

    要切换:

    • sdk use java 8.0.181-oracle
    • 切换到JDK 11 sdk use java 11.0.0-open

    要设置默认值:

    • sdk default java 8.0.181-oracle
    • 默认为JDK 11 sdk default java 11.0.0-open
        7
  •  3
  •   Tom    4 年前

    你可以用 asdf

    brew install asdf
    

    配置asdf时,安装java插件

    asdf plugin-add java
    

    选择要安装的版本

    asdf list-all java
    

    例如安装和配置OpenJDK8

    asdf install java adoptopenjdk-8.0.272+10
    asdf global java adoptopenjdk-8.0.272+10
    

    . ~/.asdf/plugins/java/set-java-home.zsh
    
        8
  •  1
  •   Ranganath Samudrala    6 年前

    IMHO,不需要安装所有附加的应用程序/包。

    > /usr/libexec/java_home -V
    Matching Java Virtual Machines (8):
        11, x86_64: "Java SE 11-ea" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
        10.0.2, x86_64: "Java SE 10.0.2"    /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
        9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
        1.8.0_181-zulu-8.31.0.1, x86_64:    "Zulu 8"    /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
        1.8.0_151, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
        1.7.0_80, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
        1.6.0_65-b14-468, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
        1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    

    > /usr/libexec/java_home -v 1.8.0_181
    /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
    

    要选择Oracle的Java SE 8,您可以调用以下命令:

    > /usr/libexec/java_home -v 1.8.0_151
    /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
    

    如您所见,提供的版本号应该是唯一的字符串集:1.8.0\u181 vs 1.8.0\u151

        9
  •  1
  •   Powers    4 年前

    这个答案在Jayson的优秀答案的基础上进行了扩展,并提供了一些针对您的用例的最佳方法的更加固执己见的指导:

    • lots of other Java ecosystem 项目也很简单。
    • 通过自制下载Java版本和通过jenv切换版本是一个不错的选择,但需要更多的工作。例如, the Homebrew commands in this highly upvoted answer plugins 没有很好的文档,自述文件说项目正在寻找一个新的维护人员。jenv仍然是一个伟大的项目,解决了工作,社区应该感谢他们的出色贡献。SDKMAN是更好的选择,因为它太棒了。
    • Jabba是一个多平台的解决方案,它在Mac、Windows和PC上提供了相同的接口(它是用Go编写的,这使得它可以是多平台的)。如果您关心多平台解决方案,这是一个巨大的卖点。如果您只关心在Mac上运行多个版本,那么您就不需要多平台解决方案。如果你选择Jabba,SDKMAN对几十种流行sdk的支持就是你错过的。

    手动管理版本可能是最糟糕的选择。如果您决定手动切换版本,则可以使用此Bash代码而不是Jayson的详细代码(来自 homebrew-openjdk README :

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

    SDKMAN jenv 如果你想了解这些工具的更多背景知识。

        10
  •  0
  •   Mohamed ALOUANE    4 年前

    $ brew tap AdoptOpenJDK/openjdk
    $ brew cask install <version>
    

    要安装带有HotSpot的OpenJDK 14,请运行:

    $ brew tap AdoptOpenJDK/openjdk
    $ brew cask install adoptopenjdk14