macos java多版本 - Mac OS X和多个Java版本




brew安装指定版本java mac卸载java (9)

我如何在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?

谢谢
Dakky


Answers

正如在这个website上发现那么让我们开始安装jEnv

  1. 在终端中运行它

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
    
  2. 将jEnv添加到bash配置文件中

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    
  3. 当你第一次安装jEnv时,它不会有任何与之相关的JDK。

    例如,我刚刚安装了JDK 8,但jEnv不知道它。 检查jEnv上的Java版本

    目前它只能在系统上找到Java版本(jre)。 *显示当前选择的版本。 与rvm和rbenv不同,jEnv无法为您安装JDK。 您需要从Oracle网站手动安装JDK。

  4. 从Apple网站安装JDK 6。 这将在/System/Library/Java/JavaVirtualMachines/安装Java。 我们从Apple网站安装Java 6的原因是SUN没有为MAC提供JDK 6,所以Apple创建/修改了自己的部署版本。

  5. 同样安装JDK7和JDK8。

  6. 将JDK添加到jEnv。

    JDK 6:

    JDK 7:

    JDK 8:

  7. 检查使用jenv安装的java版本

  8. 所以现在我们的系统上有3个Java版本。 要设置默认版本,请使用该命令

    jenv local <jenv version>
    

    例如 - 我想让Jdk 1.6启动IntelliJ

    jenv local oracle64-1.6.0.65
    
  9. 检查Java版本

    java -version

而已。 我们现在有多个版本的Java,我们可以轻松地在它们之间切换。 jEnv还具有其他一些功能,例如Gradle,Ant,Maven等的包装,以及在全局或本地设置JVM选项的功能。 查看文档以获取更多信息。


Jenv在Mac Sierra上:

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

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

即使eval "$(jenv init -)"可以完成这项工作。 原因是/ bin文件夹不再像它在主页中描述的那样,而shim文件夹被用作/ bin。

  • 确保〜/ .jenv在那里
  • which java可能打印/库/ ...
  • 杰夫全球1.8
  • jenv shell 1.8

最终, which java给你:

/Users/xxxx/.jenv/shims/java


对于macOS Sierra 420

本指南由各种来源(上述回复以及其他帖子)拼凑而成,并且完美无缺。

如果你还没有安装自制软件。

请参阅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.点击“caskroom / versions”

brew tap caskroom/versions

5.安装最新版本的java

brew cask install java

6.安装Java 6(或7或8任何你需要的)

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

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

DONE

快速参考

改变java版本

...查看可用java版本的列表

jenv versions

...然后,XX在上面列表中匹配一个项目

jenv global XX

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

卸载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增加了Dylans改进)


我发现这个Java版本管理器最近称为Jabba ,其用法与rvm(ruby),nvm(node),pyenv(python)等其他语言的版本管理器非常相似。它也是跨平台的,因此它可以用于苹果电脑。

安装完成后,它会在〜/ .jabba中创建一个dir来放置您安装的所有Java版本。 它“支持安装Oracle JDK(默认)/服务器JRE,Zulu OpenJDK(自0.3.0以来),IBM SDK,Java Technology Edition(自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

在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. 安装自制酒桶
  4. 使用cask安装特定的java版本(参见下面的“homebrew-cask versions”段落)
  5. 为jenv添加此版本来管理它
  6. 检查版本是否正确地由jenv管理
  7. 对每个需要的Java版本重复步骤4到6

自制酒桶版本

使用以下命令将“caskroom / versions”水龙头添加到自制软件:

brew tap caskroom/versions

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

brew cask search java

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

brew cask install java7
brew cask install java6

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

jenv add <javaVersionPathHere>

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

另一个需要注意的重要事项,如Mac OS X 10.6.7中提到的Java Path当前JDK令人困惑

对于不同类型的JDK或安装,您将拥有不同的路径

您可以使用/usr/libexec/java_home -V来检查已安装版本的路径,请参阅如何检查Java JDK是否安装在Mac上?

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

1)内置JRE默认: /Library/Internet\ Plug-Ins/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

资源


这里有更多的bash DRY版本(基于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

您也可以使用此代码,并采取一些预防措施。

  • 选项#1:显式处理异常,例如,显示消息对话框,然后停止执行当前工作流。 例如:

    try
        {
            String stringValue = "1234";
    
            // From String to Integer
            int integerValue = Integer.valueOf(stringValue);
    
            // Or
            int integerValue = Integer.ParseInt(stringValue);
    
            // Now from integer to back into string
            stringValue = String.valueOf(integerValue);
        }
    catch (NumberFormatException ex) {
        //JOptionPane.showMessageDialog(frame, "Invalid input string!");
        System.out.println("Invalid input string!");
        return;
    }
    
  • 选项#2:如果在异常情况下执行流程可以继续,则重置受影响的变量。 例如,在catch块中进行一些修改

    catch (NumberFormatException ex) {
        integerValue = 0;
    }
    

使用字符串常量进行比较或任何类型的计算总是一个好主意,因为常量永远不会返回空值。





java macos install multiple-versions