1

我使用的是 Amazon corretto JDK,之前我的 Mac OS 中只安装了 1.8,昨天我使用 Mac OS 包安装程序安装了 Amazon corretto JDK 11,之后它将我的默认 java 版本更改为 11。

我在 Jenv 上关注了高度评价的中等博客来管理 Mac OS 上的多个版本,但我的默认 java 版本仍然没有切换回 1.8,并且在关注 stackoverflow 答案或中等帖子时没有收到任何错误。

使用 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.7

的输出java -version

java --version openjdk 11.0.7 2020-04-14 LTS OpenJDK Runtime Environment Corretto-11.0.7.10.1 (build 11.0.7+10-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.7.10.1 (build 11.0 .7+10-LTS,混合模式)

注意:我有多个使用不同 JDK 版本的应用程序,我不想使用别名方式来管理 JDK 版本,我对 Jenv 感兴趣,我可以在其中设置我的 JDK 版本全局(在我的情况下为 1.8)和本地(基于 JDK 特定应用程序使用)。

4

3 回答 3

9

您看到的问题是因为 jenv 没有为您的终端正确设置。根据您的终端,您应该查看您的 .bash_profile 或 .zshrc 并确保存在以下行:

export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

您可以通过运行来测试 jenv 是否已在终端中正确初始化which java。如果 jenv 正确初始化,您将看到如下内容:

/Users/your-username/.jenv/shims/java

如果您没有看到这个,请仔细检查 .bash_profile 或 .zshrc,如上所述。我还建议您将它们放在文件的末尾,以便确保将 jenv 添加到 PATH 的开头。

jenv 背后的魔力是jenv init. 当您打开终端时,它会运行并更新您的 PATH 以查看 ~/.jenv/shims ,其中包含一个 shim(shell 脚本),它在您运行java或其他 JRE/JDK 命令时解析您所需的 Java 版本。

于 2020-10-30T05:17:31.190 回答
2

Try adding this to your .bash_profile or .zshrc or .bashrc whatever is relevant to your macOS.

jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
 }

Then, restart terminal and you can switch java versions like:

  • jdk 1.8
  • jdk 11
于 2020-05-26T08:10:58.450 回答
1

在幕后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

于 2020-05-26T08:07:13.157 回答