当前位置: 首页 > 知识库问答 >
问题:

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

耿学义
2023-03-14
brew cask info java

显示:

Java:13,33:5B8A42F3905B406298B72D750B6919F6
https://openjdk.java.net/

所以我可以从那里安装它,但然后呢?我只能用新版本吗?

共有1个答案

穆景辉
2023-03-14

注意:这些解决方案适用于Java的各种版本,包括Java8到Java15,甚至是新的Java16。这包括OpenJDK、Oracle、IBM、Azul、Amazon Correto、Graal等公司的替代JDK。轻松使用Java7、Java8、Java9、Java10、Java11、Java12、Java13、Java14、Java15和Java16!

对于如何进行安装以及管理JDK切换,您有几个选项。安装可以通过Homebrew、SDKMAN、Jabba或手动安装完成。切换可以由JEnv、SDKMAN、Jabba完成,也可以通过设置java_home手动完成。下文将对所有这些进行说明。

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

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

>

  • 从https://SDKMAN.io/install安装SDKMAN

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

    sdk list java
    

    安装其中一个版本,例如Java16:

    sdk install java 16-open 
    

    将Java16设置为默认版本:

    sdk default java 16-open
    

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

    sdk use java 16-open
    
    sdk list java
    

    并安装其他版本,例如Amazon的JDK11:

    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 use java my-local-13
    

    在SDKMAN使用指南以及它可以安装和管理的其他SDK中可以获得更多信息。

    当您更改版本时,SDKMAN将自动为您管理pathjava_home

    java_home环境变量设置为指向取消JDK存档的方向。

    有关更多信息,请参阅手动安装的特定答案。有关如何管理多个手动安装的详细信息,还请参阅下面的“手动切换版本”一节。

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

    >

  • 如果尚未安装自制程序,请安装。确保已更新:

     brew update
    

    如果您想使用AdoptOpenJDK版本(它通常是最新版本),请添加casks tap:

     brew tap adoptopenjdk/openjdk
    

    这些cask经常更改它们的Java版本,并且可能会有其他带有其他Java版本的taps。

    查找可安装版本:

     brew search java   
    

    或对于AdoptOpenJDK版本:

     brew search jdk     
    
     brew info java
    
     brew info adoptopenjdk
    
     brew install java
    
     brew install --cask adoptopenjdk16
    

    OpenJDK的其他一些风格包括:

    可以按照网站上的说明安装Azul Systems Java Zulu认证的OpenJDK版本。

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

    /usr/libexec/java_home -V
    

    匹配Java虚拟机(8):
    16,x86_64:“OpenJDK 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”

    您还可以使用-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/ceptendes/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中创建shell别名,以便为您更改java_home:

    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_home也可以工作!

    JEnv希望Java JDK已经存在于机器上,并且可以位于任何位置。通常,您会在/library/Java/JavaVirtualMachines/中找到已安装的Java JDK。JEnv允许设置Java的全局版本,一个是针对当前shell的,另一个是每个目录的本地版本,当一些项目需要不同于其他项目的版本时,这个版本很方便。

    >

  • 如果还没有安装JEnv,请访问网站http://www.JEnv.be/以获得手动安装或使用自制程序的说明。

    将任何Java版本添加到JEnv(如果您将其放在其他位置,请调整目录):

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

    使用以下命令设置全局版本:

    jenv global 16
    

    您还可以使用jenvadd以类似的方式添加其他现有版本,并列出可用的版本。例如Java 8:

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

    有关更多命令,请参阅JEnv文档。现在,您可以随时在任何Java版本(Oracle、OpenJDK、other)之间切换,可以针对整个系统、shell或每个本地目录进行切换。

    为了在使用JEnv时帮助管理java_home,您可以添加导出插件来完成此操作。

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

    导出插件可能不会调整java_home(如果已经设置了),因此您可能需要清除配置文件中的这个变量,以便能够由Jenv管理它。

    您还可以使用jenv exec 运行单个命令,并为该命令正确设置java_homepath,这可能包括打开另一个shell。

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

    >

  • 按照主页上的说明安装Jabba。

    列出可用的JDK

    jabba LS-远程

    jabba安装openjdk@1.12.0

    使用它:

    jabba使用openjdk@1.12.0

  •  类似资料:
    • 问题内容: 我想在Mac OSX上安装OpenJDK Java,并使其与其他JDK一起工作,因为它是较新的版本。当前,我下载了tar.gz并将其放置在我的路径中,但这很难维护。 我发现唯一可以自动执行更多操作的其他安装是通过Homebrew cask进行的安装。看起来也只有当前版本: 显示: Java:13,33:5b8a42f3905b406298b72d750b6919f6 https://o

    • 我正在使用管理版本,ala PEP 440。 我已将几个版本上载到私有存储库: 我的问题是现在当我使用 我得到的版本是当我期望得到。 有没有办法让pip忽略“本地版本”,只安装准确的版本,而不必上传到不同的索引(即staging和stable)? 编辑: 我已尝试使用和标志,但问题仍然存在;皮普更喜欢0.0。2版本到0.0版本。2版本。 附加编辑: 我使用的是和python2.7

    • 我需要切换上的Java版本,但不确定如何切换,我现在的版本是但我想切换到: 我想我的Mac上没有这样的版本吧?怎样才能安装它,然后再切换到它呢?谢谢!

    • 无法安装包“MVVMCROSS.PortableSupport 3.2.2”。您正试图将此包安装到目标为“Xamarin.ios,version=v1.0”的项目中,但该包不包含与该框架兼容的任何程序集引用或内容文件。有关详细信息,请与包作者联系。 请帮忙。

    • 我正在使用python版本3.10.2,但是我想降级到3.9,因为它与我项目中的库不兼容。我怎样才能用终端命令做到这一点? 因此,当我键入<code>python3——版本</code>时,我的版本是3.10.2,我想将其降级。IDE是pycharm