如何设置或更改OS X上的默认Java(JDK)版本?

如何在Mac上更改Java的默认版本?

首先运行/usr/libexec/java_home -V ,输出如下所示:

 Matching Java Virtual Machines (3): 1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home 1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home 

select你想要的默认版本(参数为1.6.0_65-b14-462 ),然后:

 export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462` 

或者你可以指定主要版本,如果它是唯一的,比如

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

现在当你运行java -version你会看到:

 java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode) 

只需将export JAVA_HOME…行添加到您的shell的init文件即可。

基于/ usr / libexec / java_home的小鱼函数

 function jhome set JAVA_HOME (/usr/libexec/java_home $argv) echo "JAVA_HOME:" $JAVA_HOME echo "java -version:" java -version end 

如果你不使用鱼,你可以在bash中做类似的事情:

 #!/bin/bash jhome () { export JAVA_HOME=`/usr/libexec/java_home $@` echo "JAVA_HOME:" $JAVA_HOME echo "java -version:" java -version } 

然后在javas之间进行切换:

 $> jhome #switches to latest java $> jhome -v 1.7 #switches to java 1.7 $> jhome -v 1.6 #switches to java 1.6 

ref: https : //gist.github.com/kenglxn/1843d552dff4d4233271

这个答案试图解决:在MacOS El Capitan&Sierra上安装几个版本的JDK用于开发目的时,如何在系统范围内 (而不是在当前运行的shell)中控制Java版本 。 据我所知,目前的答案都没有(*)。

作为一名开发人员,我使用了几个JDK,并且我想轻松地从一个切换到另一个。 通常我有最新的稳定版本(现在是Java 8),其他版本则用于testing(例如,一个旧的JDK7和一个“早期访问”的JDK9)。 但是我现在不想让系统使用Java 9(例如,当我启动我的IDE时)。 默认应该是最新的稳定。

我目前的解决scheme

  • /Library/Java/JavaVirtualMachines下保留所有JDK的默认位置。 系统默认select最高版本。
  • 要从默认情况下排除JDK,请将其Contents/Info.plist重命名为Info.plist.disabled 。 当$JAVA_HOME指向JDK时,仍然可以使用该JDK,或者在脚本或configuration中明确引用该JDK。 它只会被系统的java命令忽略。

系统启动器将使用具有Info.plist文件的版本中最高版本的JDK。

在使用其他JDK的shell中工作时,请在现有答案( jenv/usr/libexec/java_home等的自定义别名/脚本)中select您的方法。


在这个要点的调查细节。


(*)当前的答案已经过时(不再适用于MacOS El Capitan或Sierra),或者只处理单个JDK,或者不涉及系统范围的方面。 许多解释如何更改$JAVA_HOME ,但这只影响当前的shell以及从那里启动的内容。 它不会影响从OS启动器启动的应用程序(除非您更改正确的文件和注销/login,这是很乏味的)。 和jenv一样,它很酷,但是据我所知,它只是改变环境variables,所以它也有同样的限制。

添加上面的答案,我把下面的行放在我的.bash_profile中,这使得切换非常方便:

 alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version" alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version" 

通过input以下内容我可以切换到Java 8:

 $ j8 java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) 

使用jenv是一个简单的方法。

1.安装jenv

  curl -s get.jenv.io | 庆典 

2.configurationjenv

     cd〜/ .jenv / candidates /
     mkdir java
    裁谈会的Java
     mkdir 1.7
     mkdir 1.8

3.连接jdkpath

     ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin〜/ .jenv / candidates / java / 1.7
     ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin〜/ .jenv / candidates / java / 1.8

你全都定了

切换命令:

jenv使用java 1.8

默认设置:

jenv默认java 1.7

这是一个有点棘手,但尝试按照安装在OS X 10.9 Java(小牛)中描述的步骤。 基本上,你将不得不更新你的别名到java

一步步:

在安装JDK 1.7之后,您将需要执行sudo ln -snf以将链接更改为当前的java 。 为此,请打开terminal并发出以下命令:

 sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK 

请注意,目录jdk1.7.0_51.jdk可能会根据您安装的SDK版本而改变。

现在,您需要将JAVA_HOME为指向jdk_1.7.0_xx.jdk安装位置。 再次打开terminal并键入:

 export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home" 

您可以在您的.bashrc文件中添加上面的export JAVA_HOME行,以在terminal中永久性地使用java

安装JDK,而不仅仅是JRE

 /usr/libexec/java_home -v 1.8 

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

下一个

 touch .bash_profile open -a TextEdit.app .bash_profile 

TextEdit会显示一个空白页面,您可以填写。

添加到文档: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

在terminal:

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

尝试命令:

javac -version

应输出:

 javac 1.8.0_111 
 function setjdk() { if [ $# -ne 0 ]; then removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin' if [ -n "${JAVA_HOME+x}" ]; then removeFromPath $JAVA_HOME fi export JAVA_HOME=`/usr/libexec/java_home -v $@` export PATH=$JAVA_HOME/bin:$PATH fi } 

把它放在你的〜/ .profile文件中,然后像你的terminal一样使用setjdk 1.8setjdk 1.7setjdk 9等等。

如果你没有removeFromPath那么它是:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

从苹果官方的java_home(1)手册页 :

 **USAGE** /usr/libexec/java_home helps users set a $JAVA_HOME in their login rc files, or provides a way for command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi- tecture requirement. The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory, which is useful for starting Java command-line tools from launchd plists without hardcoding the full path to the Java command-line tool. Usage for bash-style shells: $ export JAVA_HOME=`/usr/libexec/java_home` Usage for csh-style shells: % setenv JAVA_HOME `/usr/libexec/java_home` 

使用jenv,它就像一个Java环境pipe理器。 这是超级容易使用和清洁

对于Mac,请按照以下步骤操作:

 brew install jenv git clone https://github.com/gcuisinier/jenv.git ~/.jenv 

安装:如果您使用的是bash,请按照以下步骤操作:

 $ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(jenv init -)"' >> ~/.bash_profile $ exec $SHELL -l 

将所需的JVM版本添加到jenv:

 jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 

jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

检查安装的版本:

 jenv versions 

通过以下方式设置要使用的Java版本:

 jenv global oracle64-1.6.0 

TL; DR

添加行:

export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

到文件

~/.bashrc

显然取代你的下载版本。

这个工具将为你做的工作:

http://www.guigarage.com/2013/02/change-java-version-on-mac-os/

这是一个简单的JavaOne,可以用来定义当前的Java版本。 该版本可以在工具中select版本后打开的shell中使用。

如果您有多个版本,并且想要使用特定版本运行某些内容,请使用以下示例:

 /usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar 

基于@markhellewell的答案,我创build了几个别名函数,将为您做。 只要将这些添加到你的shell启动文件

 #list available jdks alias jdks="/usr/libexec/java_home -V" # jdk version switching - eg `jdk 6` will switch to version 1.6 function jdk() { echo "Switching java version"; export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`; java -version; } 

https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

太容易的解决scheme:真是头疼 – 这是一个快速简单的解决scheme,为我工作。

Mac OS Sierra版本10.12.13

  1. 使用快捷键:CMD + SHIFT + G – 键入“/ Library /”

  2. findJAVA文件夹

  3. 右键单击Java文件夹=移动到垃圾箱(需要密码)

  4. 安装:Java SE开发工具包8 jdk-8u131-macosx-x64.dmg | 下载Javascript SDK

  5. 确保新的JAVA文件夹出现在/ LIBRARY /
  6. 安装Eclipse | 为Java开发人员安装Eclipse IDE
  7. 轰炸完成