如何在Mac OSX上安装Java以允许版本切换? [英] How do I install Java on Mac OSX allowing version switching?

查看:53
本文介绍了如何在Mac OSX上安装Java以允许版本切换?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Mac OSX上安装OpenJDK Java,并使其与其他JDK一起工作,因为它是较新的发行版.当前,我下载了tar.gz并将其放置在我的路径中,但这很难维护.

我发现唯一可以自动执行更多操作的其他安装是通过Homebrew cask进行的安装.看起来也只有当前版本:

 酒桶信息java 

显示:

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

所以我可以从那里安装它,那又如何呢?我只能坚持使用新版本吗?

解决方案

注意: 这些解决方案适用于各种Java版本,包括Java 8至Java 15,甚至是新的Java 16.这包括来自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切换,您有一些选择.可以通过Homebrew, SDKMAN Jabba 或手动安装.可以通过 JEnv Jabba ,或通过设置 JAVA_HOME 手动进行.所有这些都在下面描述.


安装

首先,使用您喜欢的任何方法(包括Homebrew,SDKMAN或手动安装tar.gz文件)安装Java.手动安装的优点是可以将JDK的位置放置在Mac OSX的标准位置.否则,有一些更简单的选项,例如SDKMAN,它们也将为JVM安装其他重要且通用的工具.

使用SDKMAN安装和切换版本

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

  1. https://sdkman.io/install

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

      sdk list java 

  3. 安装这些版本之一,例如Java 16:

      sdk install java 16-open 

  4. 将Java 16设置为默认版本:

      sdk默认的Java 16-open 

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

      sdk使用Java 16-open 

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

  sdk list java 

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

  sdk install java 11.0.10.9.1-amzn 

SDKMAN可以使用以前安装的现有版本.只需执行本地安装,并给出您自己的版本标签和JDK的位置即可:

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

并自由使用:

  sdk使用java my-local-13 

SDKMAN使用指南 http://jdk.java.net/(适用于Mac OSX)下载OpenJDK示例 Java 16 )

  • 取消存档OpenJDK tar,并将生成的文件夹(即 jdk-16.jdk )放入您的/Library/Java/JavaVirtualMachines/文件夹中是JDK安装的标准位置和预期位置.您还可以在现实中想要的任何地方安装.

  • 设置 JAVA_HOME 环境变量以指向您取消归档JDK的方向.

  • 有关更多信息,请参见特定于手动安装的答案.另请参见下面的手动切换版本"部分.有关如何管理多个手动安装的更多信息.

    使用Homebrew安装

    2018年10月3日之前在Homebrew Cask中可用的Java版本确实是Oracle JVM.但是,现在,它已更新为OpenJDK.请确保更新Homebrew,然后您将看到可用于安装的最新版本.

    1. 安装Homebrew (如果尚未安装).确保已更新:

        brew更新 

    2. 如果要使用 AdoptOpenJDK 版本(其中往往是最新的):

        brew tap采用openjdk/openjdk 

      这些容器经常更改其Java版本,并且在那里可能还会有其他Java版本的水龙头.

    3. 寻找可安装的版本:

        brew search java 

      或对于AdoptOpenJDK版本:

        brew search jdk 

    4. 检查将要安装的版本的详细信息:

        brew info java 

      或对于AdoptOpenJDK版本:

        brew info采用openjdk 

    5. 安装特定版本的JDK,例如 java11 adoptopenjdk8 adoptopenjdk11 adoptopenjdk16 ,或者只是 java adoptopenjdk 来获取最新版本.例如:

        brew install javabrew install --cask采用openjdk16 

    这些将被安装到/Library/Java/JavaVirtualMachines/中,这是Mac OSX上的传统位置.

    其他安装选项:

    OpenJDK的其他一些风味是:

    可以通过以下方法安装

    Azul Systems Java Zulu 认证的OpenJDK构建.网站上的说明.

    Zulu®是OpenJDK的经过认证的版本,完全符合Java SE标准.Zulu是100%开放源代码,可免费下载.现在,Java开发人员,系统管理员和最终用户可以通过部署灵活性和对升级时间的控制来享受开源Java的全部好处.

    Amazon Correto OpenJDK构建具有易于使用的安装包适用于Java 8,Java 11,Java 15和Java16.它将安装到Mac OSX上的标准/Library/Java/JavaVirtualMachines/目录中.

    Amazon Corretto是Open Java Development Kit(OpenJDK)的免费,多平台,可立即投入生产的发行版.Corretto带有长期支持,其中包括性能增强和安全修复.亚马逊内部在数千种生产服务上运行Corretto,Corretto被证明与Java SE标准兼容.使用Corretto,您可以在流行的操作系统(包括Linux,Windows和macOS)上开发和运行Java应用程序.


    我的JDK在哪里?!?!

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

     <代码>/usr/libexec/java_home -V 

    匹配Java虚拟机(8):
    16,x86_64:"AdoptOpenJDK 16";/图书馆/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home15,x86_64:"OpenJDK 15";/图书馆/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home14,x86_64:"OpenJDK 14";/图书馆/Java/JavaVirtualMachines/jdk-14.jdk/Contents/Home13,x86_64:"OpenJDK 13"/图书馆/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home12,x86_64:"OpenJDK 12"/图书馆/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
    11,x86_64:"Java SE 11";/图书馆/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,x86_64:"Java SE 9";/图书馆/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
    1.8.0_144,x86_64:"Java SE 8"/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

    您还可以使用 -v 仅报告特定Java版本的位置.例如对于Java 16:

     <代码>/usr/libexec/java_home -v 16 

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

    在使用JEnv之类的工具,将本地安装添加到SDKMAN或在Jabba中链接系统JDK时,知道已安装JDK的位置也很有用.

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

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

    手动切换版本

    Java可执行文件是一个包装程序,它将使用在 JAVA_HOME 中配置的任何JDK,因此您可以更改它以同时更改所使用的JDK.

    例如,如果您将JDK 16安装或解压缩到/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 中创建外壳别名以为您更改 JAVA_HOME :

      export JAVA_8_HOME = $(/usr/libexec/java_home -v1.8)导出JAVA_9_HOME = $(/usr/libexec/java_home -v9)导出JAVA_10_HOME = $(/usr/libexec/java_home -v10)出口JAVA_11_HOME = $(/usr/libexec/java_home -v11)导出JAVA_12_HOME = $(/usr/libexec/java_home -v12)导出JAVA_13_HOME = $(/usr/libexec/java_home -v13)导出JAVA_14_HOME = $(/usr/libexec/java_home -v14)导出JAVA_15_HOME = $(/usr/libexec/java_home -v15)导出JAVA_16_HOME = $(/usr/libexec/java_home -v16)别名java8 ='export JAVA_HOME = $ JAVA_8_HOME'别名java9 ='export JAVA_HOME = $ JAVA_9_HOME'别名java10 ='export JAVA_HOME = $ JAVA_10_HOME'别名java11 ='export JAVA_HOME = $ JAVA_11_HOME'别名java12 ='export JAVA_HOME = $ JAVA_12_HOME'别名java13 ='export JAVA_HOME = $ JAVA_13_HOME'别名java14 ='export JAVA_HOME = $ JAVA_14_HOME'别名java15 ='export JAVA_HOME = $ JAVA_15_HOME'别名java16 ='export JAVA_HOME = $ JAVA_16_HOME'#默认为Java 16Java16的 

    然后更改版本,只需使用别名即可.

     <代码> java8Java版本 

    java版本"1.8.0_144"

    当然,手动设置 JAVA_HOME 也可以!


    使用JEnv切换版本

    JEnv 期望Java JDK已经存在于计算机上,并且可以在任何位置.通常,您可以在/Library/Java/JavaVirtualMachines/中找到已安装的Java JDK.JEnv允许设置Java的全局版本,一个用于当前Shell的全局版本以及一个按目录的本地版本,当某些项目需要与其他项目不同的版本时,该版本非常方便.

    1. 如果尚未安装JEnv,请在站点上的说明 http://www.jenv.be/进行手动安装或使用Homebrew.

    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/Homejenv版本 

    有关更多命令,请参见 JEnv文档.现在,您可以随时在整个系统,外壳程序或每个本地目录之间的任何Java版本(Oracle,OpenJDK等)之间进行切换.

    要在使用JEnv时帮助管理 JAVA_HOME ,您可以添加导出插件为您做到这一点.

      $ jenv enable-plugin export您可以重新启动会话以激活jenv导出插件echo导出插件已激活 

    如果导出插件已经设置,则它可能不会调整 JAVA_HOME ,因此您可能需要清除配置文件中的此变量,以便可以由JEnv对其进行管理.

    您还可以使用 jenv exec< command>< parms ...> 来运行单个命令,并为该命令正确设置 JAVA_HOME PATH ,其中可能包括打开另一个外壳程序.


    使用Jabba安装和切换版本

    Jabba 还可处理安装和切换.Jabba还将已安装的JDK放入其自己的目录树中,该目录树通常为〜/.jabba/jdk .

    1. 按照首页上的说明进行安装.

    2. 列出可用的JDK

      jabba ls-remote

    3. 安装Java JDK 12

      jabba安装openjdk@1.12.0

    4. 使用它:

      jabba使用openjdk@1.12.0

    您还可以使用别名作为版本名称,链接到已安装的现有JDK,并找到有趣的JDK(例如GraalVM,Adopt JDK,IBM JDK等)的混合体.完整的使用指南也可在主页上找到.

    Jabba会在您更改版本时自动为您管理 PATH JAVA_HOME .

    I want to install OpenJDK Java on Mac OSX and have it work alongside other JDK's since it is a newer release. Currently, I downloaded the tar.gz and placed it in my path but that is hard to maintain.

    The only other install I found that do more things automatically is the install via Homebrew cask. It looks like only the current version too:

    brew cask info java
    

    Shows:

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

    So I can install it from there, but then what? Am I stuck only with the new version?

    解决方案

    Note: These solutions work for various versions of Java including Java 8 through Java 15, and even the new Java 16. This includes alternative JDK's from OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal and more. Easily work with Java 7, Java 8, Java 9, Java 10, Java 11, Java 12, Java 13, Java 14, Java 15, and Java 16!

    You have a few options for how to do the installation as well as manage JDK switching. Installation can be done by Homebrew, SDKMAN, Jabba, or a manual install. Switching can be done by JEnv, SDKMAN, Jabba, or manually by setting JAVA_HOME. All of these are described below.


    Installation

    First, install Java using whatever method you prefer including Homebrew, SDKMAN or a manual install of the tar.gz file. The advantage of a manual install is that the location of the JDK can be placed in a standardized location for Mac OSX. Otherwise, there are easier options such as SDKMAN that also will install other important and common tools for the JVM.

    Installing and Switching versions with SDKMAN

    SDKMAN is a bit different and handles both the install and the switching. SDKMAN also places the installed JDK's into its own directory tree, which is typically ~/.sdkman/candidates/java. SDKMAN allows setting a global default version, and a version specific to the current shell.

    1. Install SDKMAN from https://sdkman.io/install

    2. List the Java versions available to make sure you know the version ID

      sdk list java
      

    3. Install one of those versions, for example, Java 16:

      sdk install java 16-open 
      

    4. Make Java 16 the default version:

      sdk default java 16-open
      

      Or switch to 16 for the current terminal session:

      sdk use java 16-open
      

    When you list available versions for installation using the list command, you will see a wide variety of distributions of Java:

    sdk list java
    

    And install additional versions, such as JDK 11 from Amazon:

    sdk install java 11.0.10.9.1-amzn
    

    SDKMAN can work with previously installed existing versions. Just do a local install giving your own version label and the location of the JDK:

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

    And use it freely:

    sdk use java my-local-13
    

    More information is available in the SDKMAN Usage Guide along with other SDK's it can install and manage.

    SDKMAN will automatically manage your PATH and JAVA_HOME for you as you change versions.


    Install manually from OpenJDK download page:

    1. Download OpenJDK for Mac OSX from http://jdk.java.net/ (for example Java 16)

    2. Unarchive the OpenJDK tar, and place the resulting folder (i.e. jdk-16.jdk) into your /Library/Java/JavaVirtualMachines/ folder since this is the standard and expected location of JDK installs. You can also install anywhere you want in reality.

    3. Set JAVA_HOME environment variable to point at direction where you unarchived the JDK.

    For further information see the answer specific to manual installation. Also see the section below "Switching versions manually" for more information on how to manage multiple manual installations.

    Install with Homebrew

    The version of Java available in Homebrew Cask previous to October 3, 2018 was indeed the Oracle JVM. Now, however, it has now been updated to OpenJDK. Be sure to update Homebrew and then you will see the lastest version available for install.

    1. install Homebrew if you haven't already. Make sure it is updated:

       brew update
      

    2. Add the casks tap, if you want to use the AdoptOpenJDK versions (which tend to be more current):

       brew tap adoptopenjdk/openjdk
      

      These casks change their Java versions often, and there might be other taps out there with additional Java versions.

    3. Look for installable versions:

       brew search java   
      

      or for AdoptOpenJDK versions:

       brew search jdk     
      

    4. Check the details on the version that will be installed:

       brew info java
      

      or for the AdoptOpenJDK version:

       brew info adoptopenjdk
      

    5. Install a specific version of the JDK such as java11, adoptopenjdk8, adoptopenjdk11, adoptopenjdk16, or just java or adoptopenjdk for the most current of that distribution. For example:

       brew install java
      
       brew install --cask adoptopenjdk16
      

    And these will be installed into /Library/Java/JavaVirtualMachines/ which is the traditional location expected on Mac OSX.

    Other installation options:

    Some other flavours of OpenJDK are:

    Azul Systems Java Zulu certified builds of OpenJDK can be installed by following the instructions on their site.

    Zulu® is a certified build of OpenJDK that is fully compliant with the Java SE standard. Zulu is 100% open source and freely downloadable. Now Java developers, system administrators, and end-users can enjoy the full benefits of open source Java with deployment flexibility and control over upgrade timing.

    Amazon Correto OpenJDK builds have an easy to use an installation package for Java 8, Java 11, Java 15, and Java 16. It installs to the standard /Library/Java/JavaVirtualMachines/ directory on Mac OSX.

    Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK). Corretto comes with long-term support that will include performance enhancements and security fixes. Amazon runs Corretto internally on thousands of production services and Corretto is certified as compatible with the Java SE standard. With Corretto, you can develop and run Java applications on popular operating systems, including Linux, Windows, and macOS.


    Where is my JDK?!?!

    To find locations of previously installed Java JDK's installed at the default system locations, use:

    /usr/libexec/java_home -V
    

    Matching Java Virtual Machines (8):
    16, x86_64: "AdoptOpenJDK 16" /Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home 15, x86_64: "OpenJDK 15" /Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home 14, x86_64: "OpenJDK 14" /Library/Java/JavaVirtualMachines/jdk-14.jdk/Contents/Home 13, x86_64: "OpenJDK 13" /Library/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home 12, x86_64: "OpenJDK 12" /Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
    11, x86_64: "Java SE 11" /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, x86_64: "Java SE 9" /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
    1.8.0_144, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

    You can also report just the location of a specific Java version using -v. For example for Java 16:

    /usr/libexec/java_home -v 16
    

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

    Knowing the location of the installed JDK's is also useful when using tools like JEnv, or adding a local install to SDKMAN, or linking a system JDK in Jabba -- and you need to know where to find them.

    If you need to find JDK's installed by other tools, check these locations:

    • SDKMAN installs to ~/.sdkman/candidates/java/
    • Jabba installs to ~/.jabba/jdk

    Switching versions manually

    The Java executable is a wrapper that will use whatever JDK is configured in JAVA_HOME, so you can change that to also change which JDK is in use.

    For example, if you installed or untar'd JDK 16 to /Library/Java/JavaVirtualMachines/jdk-16.jdk if it is the highest version number it should already be the default, if not you could simply set:

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

    And now whatever Java executable is in the path will see this and use the correct JDK.

    Using the /usr/libexec/java_home utility as previously described helps you to create aliases or to run commands to change Java versions by identifying the locations of different JDK installations. For example, creating shell aliases in your .profile or .bash_profile to change JAVA_HOME for you:

    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
    

    Then to change versions, just use the alias.

    java8
    java -version
    

    java version "1.8.0_144"

    Of course, setting JAVA_HOME manually works too!


    Switching versions with JEnv

    JEnv expects the Java JDK's to already exist on the machine and can be in any location. Typically you will find installed Java JDK's in /Library/Java/JavaVirtualMachines/. JEnv allows setting the global version of Java, one for the current shell, and a per-directory local version which is handy when some projects require different versions than others.

    1. Install JEnv if you haven't already, instructions on the site http://www.jenv.be/ for manual install or using Homebrew.

    2. Add any Java version to JEnv (adjust the directory if you placed this elsewhere):

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

    3. Set your global version using this command:

      jenv global 16
      

    You can also add other existing versions using jenv add in a similar manner, and list those that are available. For example Java 8:

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

    See the JEnv docs for more commands. You may now switch between any Java versions (Oracle, OpenJDK, other) at any time either for the whole system, for shells, or per local directory.

    To help manage JAVA_HOME while using JEnv you can add the export plugin to do this for you.

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

    The export plugin may not adjust JAVA_HOME if it is already set, so you may need to clear this variable in your profile so that it can be managed by JEnv.

    You can also use jenv exec <command> <parms...> to run single commands with JAVA_HOME and PATH set correctly for that one command, which could include opening another shell.


    Installing and Switching versions with Jabba

    Jabba also handles both the install and the switching. Jabba also places the installed JDK's into its own directory tree, which is typically ~/.jabba/jdk.

    1. Install Jabba by following the instructions on the home page.

    2. List available JDK's

      jabba ls-remote

    3. Install Java JDK 12

      jabba install openjdk@1.12.0

    4. Use it:

      jabba use openjdk@1.12.0

    You can also alias version names, link to existing JDK's already installed, and find a mix of interesting JDK's such as GraalVM, Adopt JDK, IBM JDK, and more. The complete usage guide is available on the home page as well.

    Jabba will automatically manage your PATH and JAVA_HOME for you as you change versions.

    这篇关于如何在Mac OSX上安装Java以允许版本切换?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆