在幕后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)
中设置 JDK 1.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)'
注意:要使用的版本java_home -v
在每个 JDK 安装中的Contents/Info.plist文件部分JVMVersion中定义。
我更改了它,以便在 OpenJDK 和 Oracle JDK 之间轻松切换:
$ 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。