如何更改mac上的Java默认版本?
当前回答
来自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`
其他回答
在不需要安装额外工具的情况下,让/usr/ libeexec /java_home -V将单独安装的JDK识别为一级成员的简单方法是如下所示的符号链接:
sudo ln -s <path> /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
<path>是一个包含Contents/Home/bin等子目录的目录。
一个常见的用例是注册Android Studio中包含的JDK/JRE:
在macOS上最新版本的Android Studio中,Java工具的默认位置是/Applications/Android\ Studio.app/Contents/jre。我们将使用jdk-android-studio。JDK作为标识符:
sudo ln -s /Applications/Android\ Studio.app/Contents/jre /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
现在,/usr/libexec/java_home -V将在匹配Java虚拟机下列出它:
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
11.0.13 (arm64) "JetBrains s.r.o." - "OpenJDK 11.0.13" /Applications/Android Studio.app/Contents/jre/Contents/Home
/Applications/Android Studio.app/Contents/jre/Contents/Home
这有点棘手,但请尝试遵循在OS X 10.9 (Mavericks)上安装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. conf。jdk可能会根据您安装的SDK版本而变化。
现在,您需要将JAVA_HOME设置为指向jdk_1.7.0_xx的位置。安装JDK。再次打开终端,输入:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
您可以在您的.bashrc文件中添加上面的export JAVA_HOME行,以使java永久地存在于您的终端中
JDK Switch脚本
我改编了上面@Alex的答案,并编写了以下代码来修复Java 9的代码。
$ cat ~/.jdk
#!/bin/bash
#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 $1";
requestedVersion=$1
oldStyleVersion=8
# Set the version
if [ $requestedVersion -gt $oldStyleVersion ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v $1);
else
export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
fi
echo "Setting JAVA_HOME=$JAVA_HOME"
which java
java -version;
}
切换到Java 8
$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
切换到Java 9
$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
macOS El Capitan或更新版本将选择/Library/Java/JavaVirtualMachines中可用的更高版本的JDK,因此为了降级,您可以将文件重命名为Info。plist改为Info.plist.disabled这样操作系统就会选择以前的版本。
以下是我如何在我的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)。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder