如何更改mac上的Java默认版本?
当前回答
太简单的解决方法:真让人头疼——这是一个快速简单的解决方法,对我来说很有效。
Mac OS Sierra版本10.12.13
使用快捷键:CMD+SHIFT+G -输入"/Library/" 找到JAVA文件夹 右键单击Java文件夹=移动到废纸篓(需要密码) 安装: Java SE开发工具包8 jdk-8u131-macosx-x64。下载Javascript SDK 确保新的JAVA文件夹出现在/LIBRARY/中 安装Eclipse |为Java开发人员安装Eclipse IDE 繁荣做
其他回答
检查Java版本:Java -version
版本切换:https://devqa.io/brew-install-java/
开放的~ / . bash_profile
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
别名java8=“出口JAVA_HOME=$ java_8_homs” 别名java11=“出口JAVA_HOME=$ java_11_homs”
源~ / . bash_profile
当我们切换到java11或java8时,java -version命令没有显示正确的版本。
在这种情况下,使用mvn -version查看用于构建解决方案的正确java版本
将此函数添加到bashrc或zshrc, java-change [version]以选择JDK
# set and change java versions
function java-change() {
echo "----- old java version -----"
java -version
if [ $# -ne 0 ]; then
export JAVA_HOME=`/usr/libexec/java_home -v $@`
export PATH=$JAVA_HOME/bin:$PATH
fi
echo "----- new java version -----"
java -version
}
来自Apple官方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`
以下是我如何在我的Linux (Ubuntu / Mint伙伴)上做到这一点,我猜Mac也可以这样做。
安装和配置
步骤:
[Basic - part] Download jdk (the .tgz file) by hand. Uncompress & rename properly, at a proper location. e.g /mnt/star/program/java/jdk-1.8 Make a soft link, which will be changed to switch java version later. e.g ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java Thus /mnt/star/program/java/java is the soft link. Set JAVA_HOME in a start script. Could use file like /etc/profile.d/eric.sh, or just use ~/.bashrc. e.g JAVA_HOME=/mnt/star/program/java/java Then open a new bash shell. java -version should print the java version. [More version - part] Download & install more Java version, as need, similar as above steps. e.g /mnt/star/program/java/jdk-11 [Switch - part] In ~/.bashrc, define variable for various Java version. e.g _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11' _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8' # dir of default version, _E_JAVA_HOME_D=$_E_JAVA_HOME_8 In ~/.bashrc, define command to switch Java version. e.g ## switch java version, alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME" alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME" # default java version, alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME" alias jv="java -version" In terminal, source ~/.bashrc to make the changes take effect. Then could switch using the defined commands.
命令-从上面的config
命令:
jv11 切换到Java 11 jv8 切换到Java 8 jvd 切换到默认的Java版本,该版本由上面定义的_E_JAVA_HOME_D表示。 合资企业 显示java版本。
示例输出:
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$
机制
它通过改变软链接来切换,如JAVA_HOME。
Tips
在我的机器上手动安装jdk时,我保留次要版本,然后与主要版本做一个软链接,但没有次要版本。 如 //这是实际的目录, jdk1.8.0_191 //这是jdk1.8.0_191的软链接 jdk-8 //这是一个到jdk-8或jdk-11的软链接 java 我在~/中定义了命令别名。Bashrc,但是在单独的文件中定义变量。 我正在使用~/。Eric_var定义变量,~/。bashrc将源它(例如源$HOME/.eric_var)。
这个答案试图解决:当在macOS El Capitan或更新版本(Sierra, High Sierra, Mojave)上为开发目的安装了多个JDK版本时,如何控制系统范围内的java版本(不仅仅是在当前运行的shell中)。据我所知,目前没有一个答案这样做(*)。
作为一名开发人员,我使用几个jdk,并且我想轻松地从一个jdk切换到另一个jdk。通常我有最新的稳定的用于一般用途,其他的用于测试。但我不希望系统(例如,当我启动我的IDE时)使用我目前拥有的最新的“早期访问”版本。我想控制系统的默认值,这应该是最新的稳定。
以下方法至少适用于Java 7到12(撰写本文时为早期访问),适用于Oracle JDK或OpenJDK(包括2018年10月中旬之后由AdoptOpenJDK生成的构建)。
无需第三方工具的解决方案:
将所有jdk保留在默认位置,在/Library/Java/JavaVirtualMachines下。系统默认选择最高版本。 要在默认情况下排除一个JDK,请重命名它的Contents/Info。plist到Info.plist.disabled。当$JAVA_HOME指向JDK,或者在脚本或配置中显式引用它时,仍然可以使用该JDK。它将被系统的java命令忽略。
系统启动器将使用那些有Info的JDK中最高版本的JDK。plist文件。
在shell中使用备用JDK时,从现有的答案中选择您的方法(jenv,或/usr/libexec/java_home周围的自定义别名/脚本,等等)。
调查细节在此要点。
(*) Current answers are either obsolete (no longer valid for macOS El Capitan or Sierra), or only address a single JDK, or do not address the system-wide aspect. Many explain how to change $JAVA_HOME, but this only affects the current shell and what is launched from there. It won't affect an application started from OS launcher (unless you change the right file and logout/login, which is tedious). Same for jenv, it's cool and all, but as far as I can tell it merely changes environment variables, so it has the same limitation.
推荐文章
- IntelliJ IDEA with Junit 4.7”!!JUnit 3.8或更高版本:
- 既然JavaScript和Java没有任何关系,它为什么被称为JavaScript ?
- 番石榴vs Apache Commons
- Java是编译型编程语言还是解释型编程语言?
- 我如何通过Java应用程序使用GMail,雅虎或Hotmail发送电子邮件?
- 注释@GetMapping和@RequestMapping(method = RequestMethod.GET)之间的区别
- lambda表达式中使用的变量应该是final或有效final
- 如何创建数组列表的数组?
- noclassdeffounderror:无法初始化类XXX
- 如何创建今天午夜和明天午夜的Java日期对象?
- ByteBuffer在Java中的用途是什么?
- 使Hibernate忽略未映射的实例变量
- 映射enum在JPA与固定的值?
- 如何找到可用的端口?
- 假唤醒在Java中真的发生了吗?