我使用的是,之前我的Mac中只安装了1.8,昨天我使用Mac包安装程序安装了11,之后它将我的默认java版本更改为11。
在Mac上,我遵循高评级的关于Jenv的媒体博客来管理多个版本,但我的默认java版本仍然没有切换到1.8,并且在遵循堆栈溢出答案或中间帖子时没有出现任何错误。
命令使用Jenv
jenv版本
system
1.8
* 1.8.0.252 (set by /Users/my user/.jenv/version) // note `*` that should tell the current version IMO
11
11.0
11.0.7
corretto64-1.8.0.252
corretto64-11.0.7java -version的输出
java 11.0.7 2020-04-14 LTS openjdk运行时环境Corretto-11.0.7.10.1 (构建11.0.7+10-LTS) OpenJDK 64位服务器VM Corretto-11.0.7.10.1 (构建11.0.7+10-LTS,混合模式)
注意:我有多个使用不同JDK版本的应用程序,我不想使用别名的方式来管理JDK版本,我对Jenv很感兴趣,在这里我可以在全球范围内设置JDK版本(在我的例子中为1.8),并在本地设置(基于JDK特定应用程序使用的)。
发布于 2020-10-30 05:17:31
您所看到的问题是,jenv没有为您的终端正确设置。根据您的终端,您应该查看您的.bash_profile或.zshrc,并确保存在以下行:
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"您可以通过运行which java来测试是否在终端中正确初始化了jenv。如果正确初始化了jenv,您将看到如下内容:
/Users/your-username/.jenv/shims/java如果您没有看到这一点,请重复检查上面描述的.bash_profile或.zshrc。我还建议您将这些内容放在文件的末尾,这样您就可以确保将jenv添加到路径的开头。
jenv背后的魔力是jenv init。当您打开终端时,它将运行并更新您的路径,以查看~/.jenv/shims,其中包含一个shim (shell脚本),当您运行java或其他JRE/JDK命令时,该脚本将解析您想要的Java版本。
发布于 2020-05-26 08:10:58
尝试在.bash_profile、.zshrc或.bashrc中添加与macOS相关的内容。
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}然后,重新启动终端,您可以切换java版本,如:
发布于 2020-05-26 08:07:13
在幕后,jenv使用/Library/Java/JavaVirtualMachines目录。
然后还可以键入/usr/libexec/java_home -V以显示所有可用的JDK并分析您的问题:
Matching Java Virtual Machines (4):
11.0.2_2-OracleJDK, x86_64: "Java SE 11.0.2" /Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Home
11.0.2_1-OpenJDK, x86_64: "OpenJDK 11.0.2" /Library/Java/JavaVirtualMachines/OpenJDK-jdk-11.0.2.jdk/Contents/Home
1.8.0_11, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
1.7.0_45, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Home在这个例子中,export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)设置了JDK1.8版本。
因此,您甚至可以定义以下别名:
java11_OpenJDK_export='export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.2_1-OpenJDK)'
java11_OracleJDK_export='export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.2_2-OracleJDK)'
java7_export='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)'
java8_export='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)'在Contents/Info.plist文件部分JVMVersion中的每个JDK安装中定义了要在java_home -v之后使用的版本。
我修改了它,以便在OpenJDK和Oracle之间轻松切换:
$ tail -5 /Library/Java/JavaVirtualMachines/OpenJDK-jdk-11.0.2.jdk/Contents/Info.plist | head -2
<key>JVMVersion</key>
<string>11.0.2_1-OpenJDK</string>
$ tail -5 /Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Info.plist | head -2
<key>JVMVersion</key>
<string>11.0.2_2-OracleJDK</string>因此,在您的情况下,您有两个1.8版本(1.8和1.8.0.252)。您很可能应该更新他们的Contents/Info.plist文件节JVMVersion。
https://stackoverflow.com/questions/62017152
复制相似问题