Windows/Linux/Mac下JDK完整安装下载流程

 更新时间:2026年11月10日 09:23:56   作者:代码山河  
工欲善其事,必先利其器,JDK(Java Development Kit)是Java开发的基石,是所有Java程序的编译与运行基础,本章将从JDK的下载选择讲起,逐一覆盖Windows、macOS、Linux三大主流操作系统的完整安装流程,需要的朋友可以参考下

本章导读:工欲善其事,必先利其器。JDK(Java Development Kit)是Java开发的基石,是所有Java程序的编译与运行基础。本章将从JDK的下载选择讲起,逐一覆盖Windows、macOS、Linux三大主流操作系统的完整安装流程,包括环境变量配置、多版本管理、IDE集成验证以及常见问题排查,帮助读者在任何平台上顺利搭建Java开发环境。

一、JDK概述与版本选择

1.1 什么是JDK

JDK(Java Development Kit)是Java开发工具包,它包含了Java程序开发所需的核心工具集合。一个标准的JDK包含以下关键组件:

组件说明
javacJava编译器,将.java源文件编译为.class字节码文件
javaJava应用程序启动器,用于运行编译后的字节码
jarJava归档工具,用于打包多个类文件为JAR包
javadocAPI文档生成工具,从源代码注释中提取并生成HTML文档
jdbJava调试器,用于程序调试
jpsJVM进程状态工具,查看当前运行的Java进程
jconsole图形化监控工具,用于监控JVM性能
jvisualvm可视化VM工具,提供更丰富的性能分析功能
jlink创建自定义Java运行时镜像的工具
jshellJava交互式编程环境(REPL),从Java 9开始引入

值得强调的是,JDK与JRE(Java Runtime Environment)是两个不同的概念。JRE仅包含Java程序运行所需的最小环境,不包含编译器等开发工具。对于开发者而言,应当安装完整JDK而非仅JRE。从Java 11开始,Oracle官方不再单独发布JRE,JDK本身即包含了运行环境。

1.2 Oracle JDK与OpenJDK的选择

当前Java生态中存在多个JDK发行版,理解它们之间的区别有助于做出合适的选择。

特性Oracle JDKOpenJDKAdoptium (Eclipse Temurin)Amazon CorrettoAzul Zulu
维护方Oracle公司OpenJDK社区Eclipse基金会AmazonAzul Systems
许可证Oracle免费使用许可(NFTC)GPLv2+CEGPLv2+CEGPLv2+CEGPLv2+CE
免费商用是(Java 17+)是是是是
长期支持(LTS)有(LTS版本付费支持)由发行商提供提供LTS版本提供LTS版本提供LTS版本
更新频率季度更新依赖发行商季度更新季度更新季度更新
安装包.exe/.msi/.dmg/.tar.gz.tar.gz.msi/.pkg/.tar.gz.msi/.pkg/.rpm/.deb.msi/.dmg/.deb/.rpm

选择建议:对于学习和个人开发,推荐使用OpenJDK的发行版,如Eclipse Temurin(前身为AdoptOpenJDK),因为它完全开源、免费商用、社区活跃且提供各平台的安装包。对于企业环境,如果需要商业支持服务,可选择Oracle JDK并购买支持订阅。

1.3 Java版本选择

Java的版本历史可以分为几个重要阶段。截至2026年,当前最新的LTS版本为Java 21,而Java 25预计将在2026年9月发布。

版本选择建议:

场景推荐版本原因
学习Java基础Java 17 或 Java 21LTS版本,稳定且生态成熟
企业生产环境Java 17 或 Java 21长期支持,安全更新保障
个人新项目起步Java 21享受最新LTS特性(虚拟线程等)
维护遗留系统Java 8 或 Java 11视现有项目版本决定
探索前沿特性Java 24体验最新语言特性

小贴士:本章后续安装示例以Java 21(Eclipse Temurin发行版)为主要演示对象,但安装流程同样适用于Java 17或其他版本。

二、下载JDK

2.1 各发行版下载地址

在安装之前,需要从官方网站获取JDK安装包。以下是各主流发行版的下载页面:

发行版下载地址说明
Eclipse Temurinhttps://adoptium.net/download/推荐的OpenJDK发行版,支持所有平台
Oracle JDKhttps://www.oracle.com/java/technologies/downloads/需注册Oracle账号(新版不再强制)
Amazon Correttohttps://aws.amazon.com/corretto/AWS维护,生产环境友好
Azul Zuluhttps://www.azul.com/downloads/商业友好,支持广泛
Microsoft OpenJDKhttps://www.microsoft.com/openjdk/微软构建的OpenJDK
OpenLogic OpenJDKhttps://www.openlogic.com/openjdk-downloads提供长期更新服务

2.2 下载步骤示意

以Eclipse Temurin下载为例:

  1. 打开 https://adoptium.net/download/ 页面
  2. 在"操作系统"下拉框中选择你的操作系统(Windows/macOS/Linux)
  3. 在"架构"中选择CPU架构(通常为x64,ARM Mac选择aarch64)
  4. 在"包类型"中选择安装包格式(Windows选.msi,Mac选.pkg,Linux选.tar.gz)
  5. 在"版本"中选择需要的Java版本(如21 LTS)
  6. 点击下载按钮获取安装包

注意:下载前请确认操作系统的位数(32位或64位)。现代计算机几乎均为64位架构,应下载64位版本的JDK。如果不确定,可以查看系统信息。

三、Windows平台安装教程

3.1 安装前的检查

在开始安装之前,建议先检查系统是否已安装其他Java版本。打开命令提示符(Win+R,输入cmd回车),执行:

java -version
javac -version
where java

如果系统中已有旧版本Java,可以选择卸载旧版本,也可以保留多个版本(后文将介绍多版本管理方法)。

3.2 下载Windows版JDK

Windows平台的JDK安装包通常有两种格式:

格式特点适用场景
.msiWindows Installer标准格式,支持静默安装和远程部署企业批量部署
.zip压缩包,解压即用,无需安装过程便携使用、多版本共存

这里以.msi安装包为例进行演示。从Eclipse Temurin官网下载OpenJDK21U-jdk_x64_windows_hotspot_21.x.x.msi文件。

3.3 安装步骤

步骤一:启动安装向导

双击下载的.msi安装包文件,弹出安装向导。点击"Next"进入下一步。

步骤二:接受许可协议

阅读许可协议内容,勾选"I accept the terms in the License Agreement",点击"Next"继续。

步骤三:选择安装组件

在组件选择界面,确保选中以下选项:

组件选项说明是否勾选
Set JAVA_HOME variable将JDK安装路径设置为JAVA_HOME系统环境变量强烈推荐勾选
JavaSoft (Oracle) registry keys在注册表中写入Java相关键值,供其他程序识别推荐勾选
Add to PATH将%JAVA_HOME%\bin加入系统PATH可选勾选(也可后续手动配置)
Associate .jar将.jar文件关联到Java运行时根据需求勾选

步骤四:选择安装路径

默认安装路径通常为C:\Program Files\Eclipse Adoptium\jdk-21.0.0.0-hotspot\。如果希望自定义路径,点击"Change"修改。建议避免路径中包含空格和中文字符。例如:

D:\DevTools\Java\jdk-21

步骤五:完成安装

点击"Install"开始安装。安装过程可能需要管理员权限,如果弹出UAC提示,点击"是"允许。等待进度条完成,点击"Finish"结束安装。

3.4 环境变量配置(手动)

如果安装时未勾选自动配置环境变量的选项,或者需要手动检查和确认环境变量,请按以下步骤操作。

3.4.1 打开环境变量设置

  1. 右键点击"此电脑"(或"我的电脑"),选择"属性"
  2. 点击左侧"高级系统设置"
  3. 在弹出的"系统属性"窗口中,点击"环境变量"按钮

也可以直接在搜索栏输入"环境变量",选择"编辑系统环境变量"。

3.4.2 配置JAVA_HOME

JAVA_HOME是Java开发环境中最重要的系统变量,许多工具(如Maven、Gradle、Tomcat、IntelliJ IDEA)都依赖它来定位JDK。

在"系统变量"区域点击"新建":

变量名变量值
JAVA_HOMED:\DevTools\Java\jdk-21(替换为你的实际安装路径)

3.4.3 配置PATH

在"系统变量"中找到Path变量,选中后点击"编辑"。在编辑窗口中新增一条记录:

%JAVA_HOME%\bin

%JAVA_HOME%\bin

然后点击"上移"按钮将其移动到靠前的位置,确保系统优先使用此JDK。这样做的目的是避免PATH中其他路径下的java.exe(如某些软件自带的JRE)产生干扰。
如果CLASSPATH变量尚不存在,在"系统变量"区域新建:
| 变量名 | 变量值 |
|--------|--------|
| `CLASSPATH` | `.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar` |
> **说明**:上述CLASSPATH中的`dt.jar`和`tools.jar`在Java 9及更高版本中已不存在。对于Java 9+,只需设置`CLASSPATH`为`.;`即可,表示在当前目录中查找类文件。实际上,在现代Java开发中通常不再需要手动设置CLASSPATH环境变量,IDE和构建工具会自动管理类路径。
点击"确定"保存所有设置。
### 3.5 验证安装
打开**新的**命令提示符窗口(注意:必须新开窗口,旧窗口不会继承刚修改的环境变量),依次执行以下命令:
```cmd
java -version

正确的输出类似于:

openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
javac -version

正确的输出类似于:

javac 21.0.4
echo %JAVA_HOME%

正确的输出应为JDK的安装路径:

D:\DevTools\Java\jdk-21

如果以上三条命令均显示正常,则说明JDK安装和环境变量配置成功。

3.6 第一个Java程序测试

创建一个测试文件来验证整个开发流程。在某个目录下新建HelloWorld.java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java World!");
        System.out.println("Java Version: " + System.getProperty("java.version"));
        System.out.println("Java Home: " + System.getProperty("java.home"));
    }
}

在命令提示符中,进入该文件所在目录,执行:

javac HelloWorld.java
java HelloWorld

预期输出:

Hello, Java World!
Java Version: 21.0.4
Java Home: D:\DevTools\Java\jdk-21

至此,Windows平台的JDK安装与配置全部完成。

四、macOS平台安装教程

macOS平台安装JDK有多种方式,本节介绍最常用的两种方法:Homebrew包管理器安装和官方.pkg安装包安装。

4.1 方法一:Homebrew安装(推荐)

Homebrew是macOS上最流行的包管理器,使用它可以极大地简化软件的安装和版本管理。

步骤一:安装Homebrew(如果尚未安装)

打开"终端"(Terminal),执行以下命令安装Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成后,执行brew --version验证:

brew --version
# 输出示例: Homebrew 4.x.x

步骤二:使用Homebrew搜索和安装JDK

首先搜索可用的OpenJDK版本:

brew search openjdk

输出类似于:

openjdk          openjdk@11       openjdk@17       openjdk@21       openjdk@8
openjdk@24

安装Java 21:

brew install openjdk@21

安装过程中,Homebrew会自动下载并安装依赖。安装位置通常在/usr/local/opt/openjdk@21/(Intel Mac)或/opt/homebrew/opt/openjdk@21/(Apple Silicon Mac)。

步骤三:配置符号链接

Homebrew安装的OpenJDK属于"keg-only"软件包,不会自动链接到系统路径以避免冲突。安装完成后,终端会显示提示信息,告诉你如何创建符号链接:

# 对于Apple Silicon Mac:
sudo ln -sfn /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdk
# 对于Intel Mac:
sudo ln -sfn /usr/local/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdk

4.2 方法二:.pkg安装包安装

步骤一:下载.pkg安装包

从Eclipse Temurin官网(https://adoptium.net/download/)下载macOS平台的.pkg安装包。注意选择正确的架构(Apple Silicon选择aarch64,Intel选择x64)。

步骤二:运行安装向导

双击.pkg文件启动安装向导,按照界面提示完成安装。安装过程与普通macOS软件安装流程一致,通常一路点击"继续"即可。

默认安装路径:

/Library/Java/JavaVirtualMachines/temurin-21.jdk

4.3 环境变量配置

macOS的环境变量配置依赖于所使用的Shell。现代macOS默认使用Zsh,配置文件为~/.zshrc;如果使用Bash,则配置文件为~/.bash_profile或~/.bashrc。

步骤一:确定当前Shell

echo $SHELL
# 输出 /bin/zsh 表示使用 Zsh
# 输出 /bin/bash 表示使用 Bash

步骤二:编辑配置文件

对于Zsh用户(macOS Catalina及以上版本的默认Shell):

# 使用nano编辑器打开配置文件
nano ~/.zshrc
# 或使用vim
vim ~/.zshrc

在文件末尾添加以下内容:

# ===== Java环境变量配置 =====
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib

说明:macOS提供了/usr/libexec/java_home工具来查找已安装的Java路径。-v 21参数指定版本号为21,如果不指定版本则返回最新安装的Java。通过这个工具获取的路径始终是正确的。

步骤三:刷新配置

source ~/.zshrc   # 如果使用Zsh
# 或
source ~/.bash_profile   # 如果使用Bash

4.4 验证安装

在终端中执行验证命令:

java -version

预期输出:

openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
javac -version
# 输出: javac 21.0.4
echo $JAVA_HOME
# 输出: /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
/usr/libexec/java_home -V

最后这条命令会列出macOS上所有已安装的Java版本:

Matching Java Virtual Machines (2):
    21.0.4 (arm64) "Eclipse Adoptium" - "OpenJDK 21.0.4" /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
    17.0.12 (arm64) "Eclipse Adoptium" - "OpenJDK 17.0.12" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home

4.5 macOS多版本JDK管理

如果需要在一台Mac上安装和使用多个JDK版本,使用JAVA_HOME变量切换即可。在~/.zshrc中可以定义便捷的切换函数:

# ===== 多版本JDK切换函数 =====
export JAVA_8_HOME=$(/usr/libexec/java_home -v 1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v 11)
export JAVA_17_HOME=$(/usr/libexec/java_home -v 17)
export JAVA_21_HOME=$(/usr/libexec/java_home -v 21)

# 默认使用Java 21
export JAVA_HOME=$JAVA_21_HOME

# 切换函数
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java17='export JAVA_HOME=$JAVA_17_HOME'
alias java21='export JAVA_HOME=$JAVA_21_HOME'

# 查看当前Java版本
alias javaver='java -version'

使用方法:在终端中直接输入java11即可将当前终端会话的Java切换为版本11,使用javaver查看当前版本。

五、Linux平台安装教程

Linux发行版众多,本节以最主流的Debian/Ubuntu系列和RHEL/CentOS/Fedora系列为代表,分别演示通过包管理器和手动解压两种方式安装JDK。

5.1 检查系统信息

在开始安装前,先确认Linux系统的基本信息:

# 查看系统发行版信息
cat /etc/os-release
# 查看系统架构
uname -m
# x86_64 表示64位x86架构
# aarch64 表示64位ARM架构
# 检查是否已安装Java
java -version 2>/dev/null || echo "未安装Java"
which java

5.2 方法一:包管理器安装(推荐)

包管理器安装是最简单的方式,会自动解决依赖关系。

5.2.1 Debian/Ubuntu系列(使用APT)

步骤一:更新软件包列表

sudo apt update

步骤二:安装JDK

Ubuntu/Debian官方仓库中提供了OpenJDK。自Ubuntu 20.04起,官方支持OpenJDK 11及更高版本。

# 安装Java 21
sudo apt install openjdk-21-jdk -y
# 如需安装Java 17
# sudo apt install openjdk-17-jdk -y
# 如需安装Java 11
# sudo apt install openjdk-11-jdk -y

如果官方仓库中的版本较旧,可以添加Eclipse Adoptium的官方APT仓库来获取最新版本:

# 添加Adoptium GPG密钥
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo apt-key add -
# 添加Adoptium仓库(以Ubuntu 22.04为例)
echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^UBUNTU_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
# 更新并安装
sudo apt update
sudo apt install temurin-21-jdk -y

步骤三:验证安装

java -version
javac -version

5.2.2 RHEL/CentOS/Fedora系列(使用YUM/DNF)

对于RHEL 8+ / CentOS Stream / Fedora(使用DNF):

# 搜索可用的OpenJDK版本
dnf search openjdk
# 安装Java 21
sudo dnf install java-21-openjdk-devel -y
# 安装Java 17
# sudo dnf install java-17-openjdk-devel -y

对于CentOS 7 / RHEL 7(使用YUM):

# 搜索可用的OpenJDK版本
yum search openjdk
# 安装Java 11(CentOS 7默认仓库中最高版本通常为11)
sudo yum install java-11-openjdk-devel -y

如果需要更新的版本,可以添加Adoptium的RPM仓库:

# 添加Adoptium RPM仓库
cat <<EOF | sudo tee /etc/yum.repos.d/adoptium.repo
[adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOF
# 安装
sudo dnf install temurin-21-jdk -y

5.3 方法二:手动解压.tar.gz安装

对于无法使用包管理器的场景,或需要将JDK安装在自定义位置时,可以采用手动解压方式。

步骤一:下载.tar.gz安装包

使用wget或curl下载JDK压缩包(以Eclipse Temurin为例):

# 进入下载目录
cd /tmp
# 使用wget下载(注意替换为实际的下载链接)
wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.4%2B7/OpenJDK21U-jdk_x64_linux_hotspot_21.0.4_7.tar.gz
# 或使用curl下载
# curl -L -o jdk-21.tar.gz https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.4%2B7/OpenJDK21U-jdk_x64_linux_hotspot_21.0.4_7.tar.gz

步骤二:解压到目标目录

# 创建安装目录
sudo mkdir -p /usr/lib/jvm
# 解压tar.gz文件
sudo tar -xzf OpenJDK21U-jdk_x64_linux_hotspot_21.0.4_7.tar.gz -C /usr/lib/jvm/
# 查看解压后的目录
ls -la /usr/lib/jvm/

解压后通常得到一个以版本号命名的目录,如jdk-21.0.4+7。为了便于管理和引用,可以创建一个不带版本号的符号链接:

sudo ln -s /usr/lib/jvm/jdk-21.0.4+7 /usr/lib/jvm/jdk-21

步骤三:配置环境变量

Linux上配置环境变量有多种方式,区别如下:

配置文件作用范围适用场景
~/.bashrc当前用户,每个交互Shell个人开发环境
~/.profile当前用户,登录Shell个人开发环境(仅登录时执行)
/etc/profile所有用户,登录Shell服务器多用户环境
/etc/environment所有用户,系统级全局默认环境(不支持变量展开)
/etc/profile.d/java.sh所有用户,登录Shell模块化管理(推荐服务器使用)

推荐方式:为当前用户配置(~/.bashrc)

编辑~/.bashrc文件:

nano ~/.bashrc
# 或 vim ~/.bashrc

在文件末尾添加:

# ===== Java环境变量配置 =====
export JAVA_HOME=/usr/lib/jvm/jdk-21
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib

# 可选:为JRE也设置路径
export JRE_HOME=$JAVA_HOME

让配置立即生效:

source ~/.bashrc

推荐方式:为所有用户配置(/etc/profile.d/)

在服务器环境中,如果需要让所有用户都能使用该JDK,可以在/etc/profile.d/目录下创建独立的配置脚本:

sudo tee /etc/profile.d/java.sh << 'EOF'
# Java环境变量 - 对所有用户生效
export JAVA_HOME=/usr/lib/jvm/jdk-21
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
EOF

# 赋予执行权限
sudo chmod +x /etc/profile.d/java.sh

# 重新登录或执行source使配置生效
source /etc/profile.d/java.sh

5.4 Linux验证安装

java -version
javac -version
echo $JAVA_HOME
which java

此外,可以通过以下命令查看JDK的详细安装信息:

# 查看Java可执行文件的实际路径
readlink -f $(which java)
# 查看JDK目录结构
ls -la $JAVA_HOME
# 查看javac的详细信息
javac --help | head -5

5.5 Linux多版本JDK管理

Linux上管理多个JDK版本有两种主要方式:传统的update-alternatives工具和手动环境变量切换。

5.5.1 使用update-alternatives(Debian/Ubuntu)

update-alternatives是Debian系列Linux发行版提供的工具,用于在多个相似程序之间选择和切换默认版本。

注册多个JDK到alternatives系统:

# 注册Java 21
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-21/bin/java 2100
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-21/bin/javac 2100
# 注册Java 17
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1700
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17/bin/javac 1700
# 注册Java 11
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11/bin/java 1100
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-11/bin/javac 1100

说明:命令末尾的数字(2100、1700、1100)表示优先级,数字越大优先级越高。系统会自动选择优先级最高的版本作为默认。

交互式切换JDK版本:

sudo update-alternatives --config java

执行后会看到如下交互界面:

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                   Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/jdk-21/bin/java            2100      auto mode
  1            /usr/lib/jvm/jdk-11/bin/java            1100      manual mode
  2            /usr/lib/jvm/jdk-17/bin/java            1700      manual mode
  3            /usr/lib/jvm/jdk-21/bin/java            2100      manual mode

Press <enter> to keep the current choice[*], or type selection number:

输入对应编号后回车即可切换。同样的方法用于javac:

sudo update-alternatives --config javac

查看当前alternatives状态:

update-alternatives --display java

5.5.2 使用环境变量切换(所有Linux发行版通用)

在~/.bashrc中定义便捷函数进行切换:

# ===== 多版本JDK管理函数 =====

# 定义各版本路径
export JAVA8_HOME=/usr/lib/jvm/jdk-8
export JAVA11_HOME=/usr/lib/jvm/jdk-11
export JAVA17_HOME=/usr/lib/jvm/jdk-17
export JAVA21_HOME=/usr/lib/jvm/jdk-21

# 默认使用Java 21
export JAVA_HOME=$JAVA21_HOME
export PATH=$JAVA_HOME/bin:$PATH

# 切换函数
java_switch() {
    local version=$1
    case $version in
        8)
            export JAVA_HOME=$JAVA8_HOME
            ;;
        11)
            export JAVA_HOME=$JAVA11_HOME
            ;;
        17)
            export JAVA_HOME=$JAVA17_HOME
            ;;
        21)
            export JAVA_HOME=$JAVA21_HOME
            ;;
        *)
            echo "用法: java_switch {8|11|17|21}"
            return 1
            ;;
    esac
    export PATH=$JAVA_HOME/bin:$(echo $PATH | sed "s|$JAVA_HOME/bin:||g")
    java -version
}

使用方法:

java_switch 17   # 切换到Java 17
java_switch 21   # 切换回Java 21

六、JDK目录结构详解

安装完成之后,了解JDK的目录结构有助于理解Java的运行环境和工作原理。以下是JDK 21的典型目录结构:

各目录详细说明:

目录/文件说明
bin/存放JDK的所有可执行工具,包括java、javac、jar、javadoc、jshell、jlink等。这些是开发者日常使用频率最高的工具。
conf/Java运行时配置文件的存放位置,包含net.properties(网络配置)、security/(安全策略文件)、logging.properties(日志配置)等。
include/C/C++语言头文件,用于开发JNI(Java Native Interface)程序。包含jni.h、jvmti.h等。
lib/JDK的核心类库所在的目录。从Java 9引入模块系统后,运行时类主要位于lib/modules文件(一个二进制文件)中。此外还包含src.zip(JDK类库源码)和ct.sym(编译时类型符号表)。
jmods/存放JMOD格式的Java模块文件。JMOD是Java模块系统的打包格式,每个.jmod文件对应一个Java模块(如java.base.jmod、java.sql.jmod等)。
legal/各模块和组件的开源许可证声明文件。
release纯文本文件,记录了JDK的完整版本信息,包括构建号、操作系统、架构等。

对比Java 8及以前版本:在Java 8中,lib目录下有tools.jar(编译工具)、dt.jar(设计时API)、rt.jar(运行时核心类);JDK根目录下还包含一个独立的jre/子目录。从Java 9开始,这些都被模块系统所取代,JRE不再作为独立目录存在,而是集成在JDK中。

七、IDE集成验证

安装完JDK后,需要在IDE中配置和验证,以确保开发环境可以使用。本节以IntelliJ IDEA和VS Code为例。

7.1 IntelliJ IDEA配置

步骤一:打开项目SDK设置

打开IntelliJ IDEA,依次点击:File -> Project Structure -> Project(快捷键:Ctrl+Alt+Shift+S)。

步骤二:设置Project SDK

在"SDK"下拉框中,如果JDK已被IDEA自动检测到,可以直接选择。如果未显示,点击"Add SDK" -> “JDK”,浏览到JDK的安装目录。

平台默认JDK路径示例
WindowsD:\DevTools\Java\jdk-21
macOS/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
Linux/usr/lib/jvm/jdk-21

步骤三:设置Language Level

选择与JDK版本对应的"Language Level"(如"21 - Record patterns, pattern matching for switch"等),确保可以使用相应版本的语言特性。

步骤四:验证编译与运行

创建一个简单的Java类,点击绿色的运行按钮或使用快捷键Shift+F10运行。如果程序正常输出,则说明IDE已正确集成JDK。

7.2 Visual Studio Code配置

VS Code通过Extension Pack for Java来支持Java开发。

步骤一:安装扩展

  • 打开VS Code
  • 点击左侧Extensions图标(或Ctrl+Shift+X)
  • 搜索"Extension Pack for Java"并安装

步骤二:配置JDK路径

打开VS Code设置(Ctrl+,),搜索java.home,或直接在settings.json中添加:

{
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-21",
            "path": "D:/DevTools/Java/jdk-21",
            "default": true
        }
    ]
}

步骤三:验证

创建.java文件,在代码编辑区应该能看到语法高亮和智能提示。按F5或点击"Run"按钮测试编译运行。

7.3 IDE验证清单

验证项正常表现异常现象
SDK/模块识别IDE自动检测到已安装的JDKIDE报告"No SDK"或"SDK is not configured"
代码编译无错误,生成.class文件"Cannot find compiler"或编译错误
代码运行控制台输出正确结果"Java not found"或运行时错误
智能提示输入代码时有补全提示无代码补全,无错误提示
构建工具Maven/Gradle可正常构建报错"JAVA_HOME not found"

八、常见安装问题与故障排查

8.1 问题速查表

序号问题现象可能原因解决方法
1java 不是内部或外部命令PATH变量未配置或配置错误检查PATH中是否包含%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(Unix系)
2javac 不是内部或外部命令,但java可用安装了JRE而非JDK,或PATH中JRE的优先级高于JDK安装完整JDK,确保JDK的bin目录在PATH中靠前
3java -version显示的版本与预期不符系统中存在多个Java版本,PATH优先级问题检查PATH顺序,移除不需要的Java路径,或使用全路径调用
4JAVA_HOME环境变量没有生效修改环境变量后未重启命令行窗口关闭并重新打开命令行窗口;或执行refreshenv(Windows)或source命令(Unix系)
5Error: A JNI error has occurred类文件由更高版本的JDK编译使用匹配的JDK版本运行,或带--release参数编译
6Unable to locate a Java Runtime (macOS)macOS未正确识别JDK安装执行sudo ln -sfn创建符号链接到/Library/Java/JavaVirtualMachines/
7Linux上安装后无法运行java软件包安装不完整确认安装的是-devel包(RHEL系)或-jdk包(Debian系),而非只含JRE的包
8IDE找不到JDKIDE配置问题或SDK路径不正确在IDE中手动指定JDK安装路径
9安装过程中权限被拒缺少管理员/root权限Windows以管理员身份安装,Linux/macOS使用sudo
10Apple Silicon Mac上Java程序运行缓慢安装了x64版本的JDK(通过Rosetta 2转译运行)安装aarch64版本的JDK以获得原生性能

8.2 详细排查步骤

问题一:命令行提示"java不是内部或外部命令"

问题二:版本混乱

查看系统上所有Java可执行文件的位置:

# Windows
where java

# Linux/macOS
which -a java

如果发现有多个位置,检查每个位置对应的版本:

# 使用完整路径查看版本
/usr/bin/java -version
/usr/local/bin/java -version

然后清理不需要的Java条目,删除旧版本的PATH引用,或将需要的版本移动到PATH的最前面。

问题三:macOS上Homebrew安装的JDK无法被IDE识别

这是因为Homebrew的OpenJDK采用"keg-only"安装策略。解决方法:

# 创建到标准JVM路径的符号链接
sudo ln -sfn $(brew --prefix)/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdk

执行后,IDE应该可以自动检测到这个JDK。

问题四:Linux包管理器安装的JDK缺少javac

确认安装的是开发包而非仅运行时包:

# Debian/Ubuntu
dpkg -l | grep jdk
# 如果只看到"jre"字样,需要安装开发包
sudo apt install openjdk-21-jdk -y

# RHEL/CentOS
rpm -qa | grep jdk
# 如果只看到"jre"字样,需要安装开发包
sudo dnf install java-21-openjdk-devel -y

九、各平台多版本JDK管理总结

在实际开发中,经常需要在一台机器上使用不同的JDK版本。下表对各平台的多版本管理方案进行汇总:

平台推荐方案原理便利度
Windows环境变量切换 + 批处理脚本修改JAVA_HOME变量指向不同JDK目录,动态调整PATH★★★★☆
macOSShell别名切换利用/usr/libexec/java_home工具获取各版本路径,通过Shell别名快速切换★★★★★
Linux(Debian系)update-alternativesLinux系统的标准替代品管理工具,维护/etc/alternatives/下的符号链接★★★★★
Linux(通用)环境变量切换 + Shell函数在.bashrc中定义切换函数,修改当前Shell中的JAVA_HOME和PATH★★★★☆

各平台的通用思维模型:

从原理上看,无论是哪个平台,"多版本JDK管理"本质上都是在管理以下三件事:

  1. 安装位置:将不同版本的JDK安装在不同目录中
  2. 环境变量指向:通过某种机制将JAVA_HOME和PATH指向当前需要的版本
  3. 快速切换:提供便捷的命令或工具来切换指向

理解了这个模型,就能在任何平台上灵活管理多个JDK版本。

十、安装后建议操作

10.1 验证清单

完成安装和配置后,请依次确认以下各项全部通过:

  • java -version 显示正确的版本号
  • javac -version 显示正确的版本号
  • echo $JAVA_HOME(或echo %JAVA_HOME%)显示正确的安装路径
  • 能够编译并运行一个简单的HelloWorld程序
  • IDE中能够识别并使用该JDK
  • 如果安装了多个版本,能够成功切换

10.2 性能优化建议

配置JVM堆内存:根据机器物理内存大小,可以在环境变量中设置默认的JVM选项:

# 在.bashrc或.zshrc中添加
export _JAVA_OPTIONS="-Xms256m -Xmx2048m"

启用CDS归档:类数据共享(CDS)可以减少JVM的启动时间:

# 生成共享归档文件(仅需执行一次)
java -Xshare:dump

关闭不必要的JVM功能:对于不需要的部分,可以在安装时跳过或在运行时禁用。

10.3 保持JDK更新

定期检查JDK的安全更新和新版本发布,确保使用最新补丁:

# Debian/Ubuntu
sudo apt update && sudo apt upgrade

# RHEL/CentOS/Fedora
sudo dnf update

# macOS (Homebrew)
brew update && brew upgrade

# Windows
# 访问下载页面手动下载新版本安装包

本章关键词回顾

关键词英文说明
JDKJava Development KitJava开发工具包,包含编译器、JVM、核心类库等
JREJava Runtime EnvironmentJava运行环境,仅包含运行Java程序所需组件
OpenJDKOpen Java Development KitJava的开源参考实现
JAVA_HOMEJava Home Directory指向JDK安装根目录的环境变量
PATHPath Variable操作系统查找可执行文件的路径列表
CLASSPATHClass PathJVM查找类文件的搜索路径
javacJava CompilerJava源代码编译器
JVMJava Virtual MachineJava虚拟机,执行Java字节码
LTSLong Term Support长期支持版本,提供最长时间的更新维护
Homebrew—macOS上的开源包管理器
update-alternatives—Debian/Ubuntu系统的多程序版本管理工具
JNIJava Native InterfaceJava本地编程接口,用于调用C/C++代码
JShellJava ShellJava交互式编程环境(REPL)

思考与练习

  1. 环境排查:在你的计算机上检查是否已安装Java。如果已安装,确定它是JDK还是仅JRE,并确认其版本号。如果安装了多个版本,尝试找出所有版本并记录它们的安装路径。
  2. 全新安装:根据本章教程,在你的操作系统上安装Java 21 JDK(选择Eclipse Temurin发行版),完成从下载到验证的全流程。
  3. 多版本实践:在已安装Java 21的基础上,再安装一个Java 17 JDK。尝试在命令行中切换两个版本,并分别用java -version验证切换效果。
  4. 环境变量理解:思考JAVA_HOME、PATH和CLASSPATH三者的区别和各自的作用。尝试回答:如果只设置PATH而不设置JAVA_HOME,哪些场景会出问题?
  5. IDE验证:在你的IDE(IntelliJ IDEA、VS Code或Eclipse)中,手动配置刚安装的JDK,创建一个项目并编译运行,确保整个工具链正常。
  6. 目录探索:打开JDK的安装目录,浏览bin/和lib/目录,找到javac和src.zip文件。查阅release文件中的版本信息,记录构建号和构建日期。
  7. 故障模拟:尝试临时删除或重命名JAVA_HOME环境变量,然后在命令行中执行java -version和javac -version,观察会有什么现象。之后恢复环境变量设置。

以上就是Windows/Linux/Mac下JDK完整安装下载流程的详细内容,更多关于Windows/Linux/Mac JDK安装下载的资料请关注脚本之家其它相关文章!

相关文章

  • Activiti流程文件部署过程解析

    Activiti流程文件部署过程解析

    这篇文章主要介绍了Activiti流程文件部署过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring框架整合Java Web Token问题

    Spring框架整合Java Web Token问题

    这篇文章主要介绍了Spring框架整合Java Web Token问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Java十道入门易踩坑题分析后篇

    Java十道入门易踩坑题分析后篇

    这篇文章总结分析了Java入门容易碰到的几点易进坑的题目,对于新手小白刚开始学Java非常有益处,让你少走避开弯路,感兴趣的朋友快来看看吧
    2022-01-01
  • 一文详解Java如何实现自定义注解

    一文详解Java如何实现自定义注解

    Java实现自定义注解其实很简单,跟类定义差不多,只是属性的定义可能跟我们平时定义的属性略有不同,这篇文章主要给大家介绍了关于Java如何实现自定义注解的相关资料,需要的朋友可以参考下
    2024-07-07
  • Swing图形界面实现可动态刷新的验证码

    Swing图形界面实现可动态刷新的验证码

    这篇文章主要为大家详细介绍了Swing图形界面实现可动态刷新的验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Jenkins如何设置定时发布

    Jenkins如何设置定时发布

    文章讲述了如何在Jenkins中设置定时发布项目,首先找到要定时启动的项目,然后点击配置,选择构建时间,作者分享了这一过程,希望对大家有所帮助
    2026-01-01
  • 详解Lombok安装及Spring Boot集成Lombok

    详解Lombok安装及Spring Boot集成Lombok

    这篇文章主要介绍了详解Lombok安装及Spring Boot集成Lombok,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Application.yml的自定义属性的读取方式

    Application.yml的自定义属性的读取方式

    这篇文章主要介绍了Application.yml的自定义属性的读取方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • springBoot项目常用目录解读

    springBoot项目常用目录解读

    这篇文章主要介绍了springBoot项目常用目录解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java 实现 ReAct Agent工具调用与推理循环的过程

    Java 实现 ReAct Agent工具调用与推理循环的过程

    文章介绍了Agent的概念,与普通LLM的区别,并详细讲解了ReAct模式,包括定义工具、ReAct Prompt模板、构建推理循环和工具执行逻辑,还对比了j-langchain和LangChain Python的特点,强调了j-langchain的透明度和可调试性
    2026-04-04

最新评论