在实际 java 开发中,jdk 的安装是项目启动的第一步。很多开发者,尤其是刚接触 java 或从旧版本升级的开发者,常常在环境配置这一步就遇到各种问题:环境变量配置错误导致 java -version 命令不生效、多个 jdk 版本共存时系统调用混乱、或者下载了错误的安装包导致 ide 无法识别。这些问题看似基础,却直接影响后续所有开发、编译和运行环节的顺畅度。
本文将围绕 jdk 17 的安装,提供一个从下载、安装、配置到验证的完整教程。无论你是 windows、macos 还是 linux 用户,都能找到对应的操作步骤。更重要的是,我们会深入解释每一步背后的原理,比如环境变量 java_home 和 path 的作用、不同安装包(如 .msi 、 .pkg 、 .tar.gz )的区别,以及如何在同一台机器上管理多个 jdk 版本。完成本文的实践后,你将拥有一个稳定、可验证的 jdk 17 开发环境,并能清晰排查常见的环境配置问题。
1. 理解 jdk 17 及其安装前的关键决策
在开始下载安装包之前,我们需要明确几个核心概念和选择,这能避免后续很多不必要的麻烦。
1.1 jdk、jre 与 jvm:它们分别是什么?
很多新手会混淆这三个术语。简单来说:
- jvm (java virtual machine) :java 虚拟机。它是 java 程序运行的“引擎”,负责执行编译后的字节码(
.class文件)。但仅有 jvm 无法开发 java 程序。 - jre (java runtime environment) :java 运行时环境。它包含了 jvm 和运行 java 应用程序所必需的核心类库。如果你只想运行别人写好的 java 程序(比如一个
.jar包),安装 jre 就够了。 - jdk (java development kit) :java 开发工具包。它是开发者的完整工具箱, 包含了 jre 和一系列开发工具 ,如编译器 (
javac)、调试器 (jdb)、打包工具 (jar) 等。要进行 java 开发,必须安装 jdk。
因此,我们的目标是安装 jdk 17 。
1.2 选择哪个供应商的 jdk?
自从 oracle 调整了 jdk 的授权协议后,市场上出现了多个提供 jdk 的供应商。对于学习和大多数生产环境,我们主要关注以下两个:
- oracle jdk :由 oracle 公司官方提供。从 jdk 17 开始,oracle 宣布其 jdk 在 通用免费条款和条件 下免费提供,包括商业用途,但需遵守其 oracle 免费条款和条件 协议。它通常包含一些 oracle 特有的商业特性。
- openjdk :这是 jdk 的 开源参考实现 。由 openjdk 社区维护,遵循 gplv2+cpe 协议。包括 adoptium(原 adoptopenjdk,现提供 eclipse temurin)、amazon corretto、azul zulu、microsoft build of openjdk 等,都是基于 openjdk 源码构建的发行版,它们在功能上与 oracle jdk 几乎完全一致,且对个人和商业使用完全免费。
如何选择?
- 对于学习和一般开发 :推荐使用 eclipse temurin 或 amazon corretto 。它们免费、稳定,且由大型组织(eclipse基金会、亚马逊)提供长期支持。
- 对于需要特定 oracle 商业功能的企业环境 :可选择 oracle jdk,但务必仔细阅读其许可协议。
本文将以 eclipse temurin jdk 17 为例进行安装,因为它是一个中立的、广泛使用的选择。
1.3 确认系统架构与版本
下载前,请确认你的操作系统是 64 位还是 32 位(现代电脑基本都是 64 位),以及是 windows、macos 还是 linux。
- windows :在“设置”->“系统”->“关于”中查看“系统类型”。
- macos :点击屏幕左上角苹果菜单 -> “关于本机”,查看芯片信息(apple silicon 为 arm 架构,intel 为 x64 架构)。
- linux :在终端执行
uname -m,输出x86_64表示 64 位 intel/amd,aarch64表示 arm。
2. 下载与安装:针对不同操作系统的步骤
我们将分系统讲解。请根据你的操作系统选择对应的章节。
2.1 windows 系统安装 jdk 17
windows 用户通常有两种安装方式:使用安装程序( .msi )或解压压缩包( .zip )。使用 .msi 安装程序更便捷,它会自动处理一些注册表项,并可选配置系统环境变量。
步骤 1:下载安装包
- 访问 eclipse temurin 官网的下载页面。
- 在版本列表中选择 jdk 17 (lts) 。
- 在操作系统列表中选择 windows 。
- 根据你的系统架构选择 x64 (绝大多数情况)或 aarch64 。
- 包类型选择
.msiinstaller 。 - 点击下载链接。
步骤 2:运行安装程序
- 双击下载好的
.msi文件(如openjdk17u-jdk_x64_windows_hotspot_17.0.11_9.msi)。 - 在安装向导中,点击“next”。
- 在“destination folder”界面, 记住 jdk 的安装路径 。默认路径通常是
c:\program files\eclipse adoptium\jdk-17.0.11+9。你可以保持默认或修改到一个简单的路径,例如d:\java\jdk-17。路径中 不要包含中文或空格 ,这可以避免未来某些古老工具或脚本的兼容性问题。 - 继续点击“next”,直到安装完成。
步骤 3:验证安装(初步) 安装完成后,可以打开一个新的命令提示符(cmd)或 powershell,输入以下命令:
java -version
如果安装程序 自动配置了环境变量 ,你应该能看到类似下面的输出,其中包含“temurin”字样:
openjdk version "17.0.11" 2024-04-16 openjdk runtime environment temurin-17.0.11+9 (build 17.0.11+9) openjdk 64-bit server vm temurin-17.0.11+9 (build 17.0.11+9, mixed mode, sharing)
如果提示“ java 不是内部或外部命令”,说明环境变量未自动配置,我们需要手动配置。这是 windows 安装中最关键的一步。
2.2 macos 系统安装 jdk 17
macos 用户可以通过 .pkg 安装包或 homebrew 安装。
方法一:使用 .pkg安装包(推荐)
- 访问 eclipse temurin 下载页面。
- 选择 jdk 17 (lts) ,操作系统选择 macos 。
- 根据芯片选择 x64 (intel芯片)或 aarch64 (apple silicon,即 m系列芯片)。
- 包类型选择
.pkginstaller 并下载。 - 双击
.pkg文件,按照图形界面指引完成安装。安装程序会自动将 jdk 配置到系统路径。
方法二:使用 homebrew 如果你已经安装了 homebrew,打开终端(terminal)执行以下命令:
# 首先,添加 adoptium 的 tap(如果尚未添加) brew tap homebrew/cask-versions # 然后,安装 temurin jdk 17 brew install --cask temurin17
验证安装: 打开终端,输入:
java -version
应看到 temurin jdk 17 的版本信息。macos 系统环境变量管理相对透明,通常安装后即可使用。
2.3 linux 系统安装 jdk 17
linux 用户通常使用包管理器或解压 .tar.gz 压缩包。
方法一:使用包管理器(以 ubuntu/debian 为例)
# 1. 更新包索引 sudo apt update # 2. 安装 temurin jdk 17 sudo apt install temurin-17-jdk # 3. 验证安装 java -version
方法二:手动解压 .tar.gz(通用方法)
从官网下载 linux 对应的 .tar.gz 包(如 openjdk17u-jdk_x64_linux_hotspot_17.0.11_9.tar.gz )。
打开终端,切换到下载目录,解压到目标目录(通常为 /usr/lib/jvm 或 /opt ):
sudo tar -xzf openjdk17u-jdk_x64_linux_hotspot_17.0.11_9.tar.gz -c /usr/lib/jvm
解压后,会在 /usr/lib/jvm 下生成一个类似 jdk-17.0.11+9 的目录。
接下来需要手动配置环境变量,我们将在下一章统一讲解。
3. 配置环境变量:让系统找到你的 jdk
环境变量是操作系统用来存储系统级或用户级配置信息的键值对。对于 jdk,最重要的两个环境变量是 java_home 和 path 。
java_home:指向 jdk 的安装根目录。许多 java 应用服务器(如 tomcat)、构建工具(如 maven、gradle)和 ide(如 intellij idea、eclipse)都依赖这个变量来定位 java 环境。path:系统用于查找可执行文件的目录列表。当你在命令行输入java或javac时,系统会按照path中列出的目录顺序去查找这些命令。我们需要将%java_home%\bin(windows)或$java_home/bin(macos/linux)添加到path中。
下面针对不同系统演示如何配置。
3.1 windows 手动配置环境变量
如果安装后 java -version 不生效,请按以下步骤操作:
1.确定 jdk 安装路径 :如果你忘记了,通常可以在 c:\program files\eclipse adoptium\ 或你自定义的目录下找到。
2.设置 java_home :
- 在 windows 搜索框输入“环境变量”,选择“编辑系统环境变量”。
- 点击“环境变量”按钮。
- 在“系统变量”区域,点击“新建”。
- 变量名输入
java_home。 - 变量值输入你的 jdk 安装 根目录 ,例如
d:\java\jdk-17。 确保路径正确,不要包含\bin目录 。 - 点击“确定”。
3.编辑 path 变量 :
- 在“系统变量”区域,找到并选中
path变量,点击“编辑”。 - 点击“新建”,然后输入
%java_home%\bin。 - 重要 :为了确保系统优先使用我们配置的 jdk,可以将此项通过“上移”按钮移动到列表顶部。
- 逐一点击“确定”关闭所有窗口。
4.验证配置 :
打开一个 新的 命令提示符(cmd)或 powershell(必须重新打开,环境变量才会生效)。
依次输入以下命令:
echo %java_home% java -version javac -version
echo %java_home% 应正确显示你设置的路径。
java -version 和 javac -version 都应显示 jdk 17 的信息。 javac 是编译器,它的存在是验证 jdk(而不仅仅是 jre)安装成功的关键。
3.2 linux 手动配置环境变量
对于通过解压 .tar.gz 安装的用户,需要配置环境变量。通常修改 ~/.bashrc (针对当前用户)或 /etc/profile (针对所有用户)文件。
使用文本编辑器打开配置文件,例如:
nano ~/.bashrc
在文件末尾添加以下内容(请将 /usr/lib/jvm/jdk-17.0.11+9 替换为你的实际 jdk 路径):
export java_home=/usr/lib/jvm/jdk-17.0.11+9 export path=$java_home/bin:$path
注意 : $path 放在后面,用冒号分隔。将 $java_home/bin 放在前面是为了确保系统优先使用我们配置的 jdk。
保存并退出编辑器(在 nano 中按 ctrl+x ,然后按 y ,再按回车)。
使配置立即生效:
source ~/.bashrc
验证配置:
echo $java_home java -version javac -version
3.3 环境变量配置的常见问题与排查
| 问题现象 | 可能原因 | 检查与解决方式 |
|---|---|---|
| ‘java’ 不是内部或外部命令 | 1. path 变量未包含 %java_home%\bin 。 2. java_home 变量设置错误或未设置。 3. 修改环境变量后未重启终端。 | 1. 检查 path 中是否有 %java_home%\bin 。 2. 检查 java_home 的值是否正确指向 jdk 根目录。 3. 关闭所有命令行窗口重新打开。 |
| ‘javac’ 不是内部或外部命令 | 安装了 jre 而非 jdk,或者 path 指向了 jre 的 bin 目录。 | 确认安装的是 jdk,并确保 java_home 指向 jdk 根目录, path 指向 %java_home%\bin 。 |
| 版本号与预期不符 | 系统 path 中存在其他 java 路径,且优先级更高。 | 检查 path 变量,将 %java_home%\bin 或 $java_home/bin 移动到最前面。在命令行执行 where java (windows)或 which java (macos/linux)查看实际调用的 java 命令位置。 |
4. 进阶:多版本 jdk 共存与管理
在实际开发中,你可能需要同时维护多个使用不同 java 版本的项目。让多个 jdk 共存并灵活切换是一个必备技能。
4.1 多版本共存的原理
多个 jdk 可以安装在同一台机器上。关键在于 java_home 和 path 环境变量最终指向哪个 jdk 的路径 。系统通过 path 来查找 java 、 javac 等命令。我们通过切换 java_home 的值,并确保 path 中引用了正确的 %java_home%\bin ,来实现版本切换。
4.2 在 windows 上管理多版本
方法一:手动切换环境变量 这是最直接的方法。安装多个 jdk 到不同目录,例如:
d:\java\jdk-8d:\java\jdk-11d:\java\jdk-17
当需要切换版本时,去系统环境变量设置中修改 java_home 的值,然后重启所有命令行工具。这种方法比较麻烦。
方法二:使用批处理脚本 创建一个批处理文件(如 switch_jdk.bat )来动态设置环境变量:
@echo off set java_home=d:\java\jdk-17 echo java_home switched to jdk 17.
在需要使用特定版本 jdk 的命令行中,先运行这个脚本。但此方法设置的环境变量仅对当前 cmd 会话有效。
方法三:使用第三方工具(推荐) 对于 windows 用户,强烈推荐使用 sdkman! (虽然它源自 unix,但现已支持 windows via wsl/git bash/cygwin)或 jabba 。这些工具可以让你通过简单的命令安装、列出、使用和切换不同版本的 jdk。
4.3 在 macos/linux 上管理多版本
使用 sdkman!(强烈推荐) sdkman! 是一个管理多个 sdk 版本的工具,支持 java、groovy、scala 等。
安装 sdkman!:
curl -s "https://get.sdkman.io" | bash source "$home/.sdkman/bin/sdkman-init.sh"
列出所有可安装的 java 版本:
sdk list java
安装指定版本的 jdk(例如 temurin 17):
sdk install java 17.0.11-tem
切换当前终端使用的版本:
sdk use java 17.0.11-tem
设置某个版本为系统默认:
sdk default java 17.0.11-tem
手动使用 update-alternatives (debian/ubuntu) 如果你通过包管理器安装了多个 jdk,可以使用 update-alternatives 管理:
# 注册 jdk sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17/bin/javac 1 # 切换版本 sudo update-alternatives --config java sudo update-alternatives --config javac
5. 验证安装与编写第一个 java 程序
环境配置好后,我们需要进行终极验证:编写、编译并运行一个简单的 java 程序。
5.1 终极验证步骤
检查关键命令 :打开终端或命令提示符,依次执行:
java -version # 检查运行时环境 javac -version # 检查编译器,确认是 jdk which java # (macos/linux) 查看 java 命令的实际路径 where java # (windows) 查看 java 命令的实际路径 echo $java_home # (macos/linux) 或 echo %java_home% (windows) 查看变量
所有命令都应指向你刚安装的 jdk 17 路径。
编写 helloworld :
创建一个工作目录,例如 d:\javaprojects 或 ~/java-projects 。
在该目录下,用文本编辑器创建一个新文件,命名为 helloworld.java 。
输入以下经典代码:
public class helloworld {
public static void main(string[] args) {
system.out.println("hello, world! from jdk " + system.getproperty("java.version"));
}
}
注意 :文件名必须与公共类名 helloworld 完全一致,包括大小写。
编译 java 文件 :
在终端中,导航到 helloworld.java 所在的目录。
执行编译命令:
javac helloworld.java
如果编译成功,该目录下会生成一个 helloworld.class 文件(字节码文件)。没有任何输出通常意味着成功。
运行 java 程序 :
执行运行命令:
java helloworld
注意 :运行命令使用的是类名 helloworld ,而不是文件名 helloworld.class 。
如果一切正常,你将看到输出:
hello, world! from jdk 17.0.11
5.2 验证过程中的常见错误
| 错误信息 | 原因分析 | 解决方案 |
|---|---|---|
| 错误: 找不到或无法加载主类 helloworld | 1. 执行 java 命令的目录不对, class 文件不在当前目录或类路径下。 2. 类名拼写错误。 3. 执行了 java helloworld.class 。 | 1. 使用 cd 命令切换到 helloworld.class 所在目录再执行 java helloworld 。 2. 检查类名大小写。 3. 确保命令是 java helloworld 。 |
| 错误: 类 helloworld 是公共的, 应在名为 helloworld.java 的文件中声明 | 源代码中 public class 的名字与文件名不一致。 | 确保文件名和 public class 后的名字完全一致。 |
| javac: 未找到命令 | path 环境变量未正确配置,或指向了不包含 javac 的 jre。 | 回顾第 3 章,检查 java_home 和 path 配置,确保指向的是 jdk 的 bin 目录。 |
6. 集成开发环境(ide)配置
在 ide 中配置 jdk 是项目开发的最后一步。这里以 intellij idea 和 eclipse 为例。
6.1 在 intellij idea 中配置 jdk 17
- 打开项目结构设置 :
file->project structure(ctrl+alt+shift+s)。 - 配置 sdk :
- 在
project settings->project下,点击sdk下拉框,选择add sdk->jdk。 - 在弹出的文件选择器中,导航到你的 jdk 17 安装根目录 (例如
d:\java\jdk-17),点击ok。 - idea 会自动识别并命名为“17”。
- 在
- 配置模块 :在
project settings->modules中,确保每个模块的dependencies选项卡里,module sdk都选择了刚才添加的 jdk 17。 - 配置编译器 :在
settings->build, execution, deployment->compiler->java compiler中,可以设置项目和各模块的target bytecode version为 17。
6.2 在 eclipse 中配置 jdk 17
- 打开首选项 :
window->preferences。 - 添加 jre :导航到
java->installed jres。 - 点击
add...,选择standard vm,点击next。 - 设置 jre home :点击
directory...,选择你的 jdk 17 安装根目录 。eclipse 会自动填充jre name(如“jdk-17”)。 - 点击
finish并勾选新添加的 jre 作为默认。 - 为项目指定 jre :右键点击项目 ->
properties->java build path->libraries选项卡。选中jre system library,点击edit...,选择workspace default jre (jdk-17)。
关键点 :在 ide 中,你需要指定的是 jdk 的根目录 ,而不是 bin 目录。ide 会自己找到必要的工具和库。
7. 生产环境考量与最佳实践
将 jdk 17 用于学习或开发测试很简单,但在生产环境部署时,需要考虑更多。
- 版本选择 :jdk 17 是长期支持版本,适合生产环境。始终使用该 lts 版本的最新更新版,以获取安全补丁和错误修复。
- 供应商选择 :生产环境建议选择提供长期支持且条款清晰的 openjdk 发行版,如 eclipse temurin、amazon corretto 或 microsoft build of openjdk。明确其支持周期。
- 安装方式 :
- linux 服务器 :优先使用操作系统官方的包管理器(如
yum,apt)安装,便于统一管理和更新。其次考虑下载.tar.gz包解压到/opt或/usr/lib/jvm目录。 - 容器化部署 :在 dockerfile 中,使用官方镜像或基于
eclipse-temurin:17-jdk这样的基础镜像,确保环境一致性。
- linux 服务器 :优先使用操作系统官方的包管理器(如
- 环境变量隔离 :在生产服务器上,避免在全局环境变量中设置
java_home。应该为每个应用服务(如 tomcat)在其启动脚本(如setenv.sh或catalina.sh)中单独设置java_home和java_opts(jvm 参数)。这可以防止多个应用因共用 jdk 版本或参数而产生冲突。 - 权限管理 :jdk 安装目录应对运行 java 进程的用户(如
tomcat,appuser)具有读取和执行权限,但通常不需要写权限。 - 安全加固 :定期关注 jdk 供应商的安全公告。移除或禁用不需要的模块,可以通过
jlink工具创建自定义的、更小的运行时映像。审查并设置安全的 jvm 参数,例如限制堆内存、设置垃圾回收器、启用安全随机数生成器等。 - 监控与日志 :配置 jvm 的 gc 日志和性能监控(如 jmx),以便在出现性能问题时进行诊断。确保应用程序日志和 jvm 日志被妥善收集和管理。
完成以上所有步骤,你就不仅是在电脑上安装了一个软件,而是系统地搭建并理解了一个可靠的 java 开发与运行基础环境。这个环境是后续学习 spring boot、微服务、大数据等所有 java 相关技术的基石。当遇到环境问题时,按照从“检查命令路径”到“验证 ide 配置”的排查链路,你能快速定位并解决绝大多数问题。
以上就是jdk 17下载、安装、配置到验证的完整教程的详细内容,更多关于jdk17下载与安装的资料请关注代码网其它相关文章!
发表评论