如何更改mac上的Java默认版本?
当前回答
如果你用的是fish,而你用的是mac,你希望能够在JDK之间切换,那么下面对我来说适用于mac。
@kenglxn的答案对我不起作用,我发现它没有设置-g,这是全局的!
放在~/.config/fish/config.fish下面
alias j8="jhome -v 1.8.0_162"
alias j9="jhome -v 9.0.1"
function jhome
set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
funcsave jhome
要了解您已安装的版本/次要版本,您可以执行以下操作:
/usr/libexec/java_home -V 579ms Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_162, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
其他回答
这个答案试图解决:当在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.
使用jenv是一种简单的方法。(2022年更新)
安装jenv:参见入门 使用brew安装java Brew install openjdk@11 Ln -s /usr/local/opt/openjdk@11/libexec/openjdk。jdk /图书馆/ Java / JavaVirtualMachines / openjdk - 11. jdk #其他java Brew install openjdk@8 Brew install openjdk@17 添加java到jenv jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home 用法:参考jenv
如果你有多个版本,并且你想使用一个特定的版本来运行一些东西,请使用这个例子:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
基于@markhellewell的答案,我创建了几个别名函数,将为您做这件事。只需将这些添加到您的shell启动文件
#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `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
一个基于/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
如果你不使用fish,你可以在bash中做类似的事情:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
然后在java do之间切换:
$> jhome #switches to latest java
$> jhome -v 1.7 #switches to java 1.7
$> jhome -v 1.6 #switches to java 1.6
裁判:https://gist.github.com/kenglxn/1843d552dff4d4233271
推荐文章
- 指定的子节点已经有一个父节点。你必须先在子对象的父对象上调用removeView() (Android)
- 对于一个布尔字段,它的getter/setter的命名约定是什么?
- 如何获得当前屏幕方向?
- 如何在Android中渲染PDF文件
- 如何计算一个元素在列表中出现的次数
- c++中类似于java的instanceof
- 我如何解决错误“minCompileSdk(31)指定在一个依赖的AAR元数据”在本机Java或Kotlin?
- 如何POST表单数据与Spring RestTemplate?
- Mockito中检测到未完成的存根
- 我应该如何复制字符串在Java?
- “while(true)”循环有那么糟糕吗?
- 这个方法签名中的省略号(…)是干什么用的?
- Java:如何测试调用System.exit()的方法?
- 带有返回类型的Java方法在没有返回语句的情况下编译
- Java“此语言级别不支持lambda表达式”