1. macOS 是否自带 Java 环境?
    macOS 不自带完整的 Java 开发环境,但系统会预装一个 java 占位符工具位于 /usr/bin/java,用于检测是否安装了 Java。如果你尝试运行 java 而没有安装 Java,会出现如下提示:

    No Java runtime present, requesting install.

    macOS 系统会引导你下载和安装一个基本的 Java 运行时环境(JRE),以满足运行 Java 应用程序的需求,但这不是完整的开发环境(如 JDK)。

  2. macOS 是如何管理 Java 的?
    macOS 使用一种目录结构和工具来管理多个 Java 版本。具体机制包括:

    • Java 虚拟机目录
      所有安装的 Java 版本都放置在以下目录中:
      /Library/Java/JavaVirtualMachines/
      每个 Java 版本都有一个独立的子目录,例如:
      /Library/Java/JavaVirtualMachines/jdk-17.0.8/Contents/Home
      /Library/Java/JavaVirtualMachines/jdk-20.0.2/Contents/Home
    • 系统工具 /usr/libexec/java_home
      macOS 提供了一个系统工具 /usr/libexec/java_home,用于动态管理和查找已安装的 Java 版本。
      默认行为:返回当前默认的 Java 安装路径。
      /usr/libexec/java_home
      输出示例:
      /Library/Java/JavaVirtualMachines/jdk-17.0.8/Contents/Home
      列出所有已安装的 Java 版本:
      /usr/libexec/java_home -V
      输出示例:
      Matching Java Virtual Machines (2):
      17.0.8, x86_64: "Java SE 17" /Library/Java/JavaVirtualMachines/jdk-17.0.8/Contents/Home
      20.0.2, x86_64: "Java SE 20" /Library/Java/JavaVirtualMachines/jdk-20.0.2/Contents/Home
      选择特定版本:通过参数 -v 指定需要的 Java 版本路径,例如:
      /usr/libexec/java_home -v 17
      输出示例:
      /Library/Java/JavaVirtualMachines/jdk-17.0.8/Contents/Home
    • 使用 JAVA_HOME 环境变量
      通过 JAVA_HOME 配置默认使用的 Java 版本。例如:
      export JAVA_HOME=$(/usr/libexec/java_home -v 17)
      export PATH=$JAVA_HOME/bin:$PATH
  3. /usr/libexec/java_home -V 是什么?
    /usr/libexec/java_home 是 macOS 自带的工具,专门用于管理已安装的多个 Java 版本。
    -V 参数表示列出所有已安装的 Java 虚拟机及其详细信息,包括版本号、架构和安装路径。
    作用包括:

    • 列出当前系统上所有可用的 Java 安装。
    • 为用户选择默认的 Java 版本路径。
    • 动态切换不同的 Java 版本。
      它主要服务于开发者,在需要同时管理多个 Java 版本时特别有用。
  4. 如何管理 macOS 上的 Java?

    • 安装 Java
      使用 Oracle JDK、OpenJDK 或其他分发版本(如 Adoptium、Zulu 等)安装新的 Java。
      安装路径默认在 /Library/Java/JavaVirtualMachines/
    • 切换 Java 版本
      动态切换版本:
      export JAVA_HOME=$(/usr/libexec/java_home -v 17)
      export PATH=$JAVA_HOME/bin:$PATH
      永久切换版本:将上述命令加入 ~/.zshrc~/.bash_profile
    • 卸载 Java
      删除对应版本的目录:
      sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.0.8
    • 验证 Java 配置
      检查当前默认 Java 版本:
      java -version
      查看 JAVA_HOME 的路径:
      echo $JAVA_HOME