跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

JDK 核心实操指南:从安装配置到项目打包调试全流程

介绍 JDK 核心实操,涵盖版本选择(优先 LTS)、多系统安装配置(Windows/Linux/Mac)、环境变量设置。详解 javac/java/jar/javadoc/jdb 等核心命令,演示项目编译打包流程及 MANIFEST.MF 配置。提供 jps/jstat/jmap 等性能排查工具用法,以及多版本管理方案。最后总结常见问题解决方案与最佳实践,帮助开发者快速掌握 JDK 使用与维护。

kaikai发布于 2026/3/27更新于 2026/9/1171 浏览

JDK(Java Development Kit)是 Java 开发的核心工具包,包含编译器(javac)、运行时(JRE)、调试器(jdb)、打包工具(jar)及性能分析工具(jps/jstat 等),是开发、编译、运行 Java 程序的基础。本文聚焦 JDK 核心实操,覆盖版本选择、安装配置、编译运行、工具使用、项目打包、多版本管理及问题排查,适配 Windows/Linux/Mac 三大系统,兼顾新手入门与企业级实战需求,优先选用免费无许可风险的 OpenJDK 衍生版(Adoptium Temurin、Amazon Corretto)。

一、前期准备:JDK 版本选择与下载

1. 版本选择(优先 LTS 长期支持版)

JDK 版本分为短期支持版(STS,支持 6 个月) 和长期支持版(LTS,支持 5 年 +),企业级开发优先选 LTS 版本,避免频繁升级兼容问题:

JDK 版本类型适用场景核心特点
JDK 8LTS传统项目、桌面应用、安卓开发经典稳定,兼容所有框架,国内企业主流
JDK 11LTS服务器开发、微服务(Spring Boot 2.x)模块化改造,移除冗余组件,性能提升
JDK 17LTS新项目、云原生开发(Spring Boot 3.x)长期支持至 2029 年,新增密封类、模式匹配
JDK 21LTS前沿项目、高性能场景虚拟线程、结构化并发,大幅提升并发性能
2. 安全下载渠道(免费无商用限制)
3. 版本适配

下载时需匹配系统架构:

  • Windows/Linux:区分 x86(32 位)/x64(64 位);
  • MacOS:区分 Intel 芯片 / Apple Silicon(ARM64);
  • 嵌入式 / 服务器:ARM 架构需下载对应版本(如 aarch64)。

二、JDK 安装与环境变量配置

环境变量是 JDK 的核心配置,需确保JAVA_HOME、Path配置正确,否则 javac、java 等命令无法全局调用。

1. Windows 系统(以 JDK 17 Temurin 为例)
(1)安装版安装步骤
  1. 下载.msi安装包,右键「以管理员身份运行」;
  2. 勾选「Set JAVA_ HOME variable」「Add to PATH」,安装路径建议选非中文目录(如D:\Java\jdk-17.0.9+9);
  3. 安装完成后,按 Win+R 输入cmd,执行java -version和javac -version验证,输出版本信息即成功。
(2)绿色版(解压即用)配置
  1. 下载.zip压缩包,解压到D:\Java\jdk-17.0.9+9;
  2. 配置环境变量:
    • 右键「此电脑→属性→高级系统设置→环境变量」;
    • 新建系统变量JAVA_HOME,值为解压路径(D:\Java\jdk-17.0.9+9);
    • 编辑系统变量Path,新增%JAVA_HOME%\bin,移至顶部;
  3. 重启 CMD,执行验证。
java -version
2. Linux 系统(Ubuntu 22.04 为例)
(1)APT 一键安装
# 更新软件源
sudo apt update
# 安装 JDK 17(OpenJDK)
sudo apt install openjdk-17-jdk
(2)手动配置环境变量
# 编辑 bash 配置文件
vim ~/.bashrc
# 添加以下内容(替换为实际 JDK 路径)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
# 生效配置
source ~/.bashrc
# 验证
java -version && javac -version
3. MacOS 系统
(1)Homebrew 安装(推荐)
# 安装 Homebrew(未安装则执行)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装 JDK 17 Temurin
brew install temurin17
# 验证
java -version
(2)手动配置环境变量
# 编辑 zsh 配置文件(MacOS 默认 zsh)
vim ~/.zshrc
# 添加配置(替换为实际路径)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
# 生效
source ~/.zshrc
4. 核心验证命令
# 验证 JDK 版本
java -version
# 验证编译器(javac 仅 JDK 有,JRE 无)
javac -version
# 查看 JAVA_HOME 配置
echo $JAVA_HOME # Linux/Mac
echo %JAVA_HOME% # Windows

三、JDK 核心命令实操(开发必备)

1. javac:Java 编译器(将.java 编译为.class)
基本用法
javac [参数] 源文件.java
核心示例
# 基础编译(生成 Hello.class)
javac Hello.java
# 指定编码(解决中文乱码,必配!)
javac -encoding UTF-8 Hello.java
# 指定输出目录(编译后.class 放入 bin 目录)
javac -encoding UTF-8 -d bin Hello.java
# 多文件编译(编译 src 目录下所有.java)
javac -encoding UTF-8 -d bin src/*.java
# 引入外部依赖(如引入 lib 下的 jar 包)
javac -encoding UTF-8 -d bin -cp lib/* src/Hello.java
2. java:运行编译后的.class/JAR 包
基本用法
java [JVM 参数] 主类名/JAR 包路径
核心示例
# 运行基础类(需在.class 所在目录)
java Hello
# 运行带包的类(包名:com.example)
java com.example.Hello
# 运行 JAR 包(基础方式)
java -jar demo.jar
# 自定义 JVM 参数(解决内存溢出)
java -Xms256m -Xmx1024m -jar demo.jar
# 指定类路径运行(引入外部依赖)
java -cp bin:lib/* com.example.Hello
3. jar:打包工具(将.class 打包为 JAR/WAR)
核心用法
# 创建 JAR 包(c=创建,v=详细输出,f=指定文件名)
jar cvf demo.jar -C bin/ .
# 将 bin 目录下所有文件打包为 demo.jar
# 查看 JAR 包内容(t=查看)
jar tvf demo.jar
# 解压 JAR 包(x=解压)
jar xvf demo.jar -C dist/
# 解压到 dist 目录
# 打包可执行 JAR(需配置 MANIFEST.MF)
jar cvfm demo.jar MANIFEST.MF -C bin/ .

关键:可执行 JAR 的 MANIFEST.MF 配置新建MANIFEST.MF文件,内容如下(末尾必须空一行):

Main-Class: com.example.Hello
Class-Path: lib/commons-lang3.jar lib/gson.jar
4. javadoc:生成 API 文档
# 生成单个类的文档(-d 指定输出目录)
javadoc -encoding UTF-8 -charset UTF-8 -d doc Hello.java
# 生成整个包的文档
javadoc -encoding UTF-8 -charset UTF-8 -d doc -subpackages com.example
5. jdb:简易调试工具(命令行断点调试)
# 编译时保留调试信息
javac -g -encoding UTF-8 Hello.java
# 启动调试
jdb Hello
# 核心调试命令
stop at Hello:10 # 在第 10 行打断点
run # 运行程序
next # 下一步
print var # 打印变量值
exit # 退出调试

四、JDK 内置工具实战(排查问题 / 性能调优)

JDK 内置多款工具,无需额外安装,是定位 Java 程序问题的核心利器。

1. 进程 / 内存 / GC 工具(服务器必备)
命令功能实操示例
jps查看 Java 进程 PIDjps -lv(显示完整类名 + JVM 参数)
jstat监控 GC 状态jstat -gcutil 12345 1000 10(每 1 秒采样,共 10 次)
jmap导出内存快照jmap -dump:format=b,file=heap.hprof 12345
jstack导出线程快照(排查死锁)jstack 12345 > thread_dump.txt
jinfo查看 / 修改 JVM 参数jinfo -flags 12345(查看进程 JVM 参数)
2. 可视化分析工具
(1)jconsole(基础监控)

直接执行jconsole,选择目标 Java 进程,可实时监控:

  • 内存:堆 / 非堆内存使用趋势,定位内存泄漏;
  • 线程:检测死锁、查看线程阻塞状态;
  • GC:垃圾回收次数、耗时,判断 GC 是否频繁。
(2)jvisualvm(深度分析)

JDK 8 内置,JDK 11 + 需单独下载,核心功能:

  • 内存快照分析:找出占用内存最多的对象,定位内存泄漏;
  • Visual GC 插件:直观查看新生代 / 老年代 GC 情况;
  • 线程分析:一键检测死锁,分析 CPU 占用高的线程。
3. 反编译 / 依赖分析工具
(1)javap:反编译.class 文件
# 反编译 Hello.class(查看字节码)
javap -c Hello.class
# 查看类的详细信息(常量池、方法等)
javap -verbose Hello.class
(2)jdeps:分析依赖
# 分析 JAR 包依赖的模块
jdeps --list-deps demo.jar
# 分析类依赖的 JAR 包
jdeps -cp lib/* src/Hello.java

五、Java 项目编译打包全流程(实操示例)

以「多包结构 + 外部依赖」的 Java 项目为例,完整流程如下:

1. 项目目录结构
demo-project/
├── lib/ # 外部依赖 jar 包
│   ├── commons-lang3.jar
│   └── gson.jar
├── src/ # 源码目录
│   └── com/
│       └── example/
│           └── Hello.java
├── bin/ # 编译输出目录
├── doc/ # API 文档目录
└── MANIFEST.MF # 可执行 JAR 配置文件
2. 核心操作步骤
# 1. 编译源码(指定编码、输出目录、依赖)
javac -encoding UTF-8 -d bin -cp lib/* src/com/example/Hello.java
# 2. 生成 API 文档
javadoc -encoding UTF-8 -charset UTF-8 -d doc -subpackages com.example
# 3. 打包可执行 JAR
jar cvfm demo.jar MANIFEST.MF -C bin/ .
# 4. 运行 JAR 包
java -Xms256m -Xmx1024m -jar demo.jar

六、JDK 多版本管理(解决版本兼容)

开发中常需切换 JDK 版本(如 JDK 8 编译、JDK 17 运行),不同系统有专属管理方式:

1. Windows 系统
  • 手动切换:修改JAVA_HOME的变量值为目标 JDK 路径,重启 CMD 即可;
  • 工具辅助:使用jEnv-Windows(https://github.com/jenv/jenv),一键切换版本。
2. Linux 系统
# 列出已安装的 JDK 版本
sudo update-alternatives --config java
sudo update-alternatives --config javac
# 输入对应编号,回车切换
3. MacOS 系统
# 安装 jenv
brew install jenv
# 配置 jenv 到环境变量
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
eval "$(jenv init -)" >> ~/.zshrc
source ~/.zshrc
# 添加 JDK 到 jenv
jenv add /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
# 切换版本
jenv global 17 # 全局
jenv local 8 # 当前目录

七、常见问题排查与解决方案

1. java/javac: command not found
  • 原因:Path 未配置或JAVA_HOME路径错误;
  • 解决:重新配置环境变量,确保%JAVA_HOME%\bin在 Path 中,重启终端。
2. 编译报错「编码 GBK 的不可映射字符」
  • 原因:未指定编码,系统默认 GBK 与源码 UTF-8 冲突;
  • 解决:编译时加-encoding UTF-8参数。
3. ClassNotFoundException/NoClassDefFoundError
  • 原因:类路径配置错误、缺少依赖、主类名错误;
  • 解决:检查-cp参数是否包含依赖,主类名是否带包名。
4. 运行 JAR 包报错「Could not find or load main class」
  • 原因:MANIFEST.MF 中 Main-Class 配置错误、JAR 包结构错误;
  • 解决:检查 Main-Class 是否带包名,JAR 包内是否有对应.class 文件。
5. 内存溢出(OOM)
  • 原因:堆内存不足、内存泄漏;
  • 解决:增大-Xmx参数(如-Xmx2g),用 jmap+jvisualvm 分析内存泄漏。

八、JDK 使用最佳实践

  1. 版本选择:企业级项目优先选 LTS 版本(8/11/17),新项目推荐 JDK 17;
  2. 环境配置:JAVA_HOME路径避免中文 / 空格,统一命名规范(如jdk-17.0.9+9);
  3. 编译规范:强制指定-encoding UTF-8,避免中文乱码;
  4. JVM 调优:根据程序类型配置参数(桌面程序-Xmx1g,服务器程序-Xmx4g+G1 GC);
  5. 工具使用:定期用 jstat/jvisualvm 监控程序,提前发现内存 / 线程问题;
  6. 安全维护:定期更新 JDK 补丁,优先使用 OpenJDK 衍生版,避免 Oracle 许可风险。
总结
  1. JDK 核心实操的基础是「正确安装 + 环境变量配置」,JAVA_HOME和Path是关键;
  2. 编译运行时需注意编码和类路径,打包可执行 JAR 需正确配置 MANIFEST.MF;
  3. JDK 内置工具(jps/jstat/jvisualvm)是排查 Java 程序问题的核心,需熟练掌握;
  4. 多版本管理可解决不同项目的版本兼容问题,提升开发效率。

目录

  1. 一、前期准备:JDK 版本选择与下载
  2. 1. 版本选择(优先 LTS 长期支持版)
  3. 2. 安全下载渠道(免费无商用限制)
  4. 3. 版本适配
  5. 二、JDK 安装与环境变量配置
  6. 1. Windows 系统(以 JDK 17 Temurin 为例)
  7. (1)安装版安装步骤
  8. (2)绿色版(解压即用)配置
  9. 2. Linux 系统(Ubuntu 22.04 为例)
  10. (1)APT 一键安装
  11. 更新软件源
  12. 安装 JDK 17(OpenJDK)
  13. (2)手动配置环境变量
  14. 编辑 bash 配置文件
  15. 添加以下内容(替换为实际 JDK 路径)
  16. 生效配置
  17. 验证
  18. 3. MacOS 系统
  19. (1)Homebrew 安装(推荐)
  20. 安装 Homebrew(未安装则执行)
  21. 安装 JDK 17 Temurin
  22. 验证
  23. (2)手动配置环境变量
  24. 编辑 zsh 配置文件(MacOS 默认 zsh)
  25. 添加配置(替换为实际路径)
  26. 生效
  27. 4. 核心验证命令
  28. 验证 JDK 版本
  29. 验证编译器(javac 仅 JDK 有,JRE 无)
  30. 查看 JAVA_HOME 配置
  31. 三、JDK 核心命令实操(开发必备)
  32. 1. javac:Java 编译器(将.java 编译为.class)
  33. 基本用法
  34. 核心示例
  35. 基础编译(生成 Hello.class)
  36. 指定编码(解决中文乱码,必配!)
  37. 指定输出目录(编译后.class 放入 bin 目录)
  38. 多文件编译(编译 src 目录下所有.java)
  39. 引入外部依赖(如引入 lib 下的 jar 包)
  40. 2. java:运行编译后的.class/JAR 包
  41. 基本用法
  42. 核心示例
  43. 运行基础类(需在.class 所在目录)
  44. 运行带包的类(包名:com.example)
  45. 运行 JAR 包(基础方式)
  46. 自定义 JVM 参数(解决内存溢出)
  47. 指定类路径运行(引入外部依赖)
  48. 3. jar:打包工具(将.class 打包为 JAR/WAR)
  49. 核心用法
  50. 创建 JAR 包(c=创建,v=详细输出,f=指定文件名)
  51. 将 bin 目录下所有文件打包为 demo.jar
  52. 查看 JAR 包内容(t=查看)
  53. 解压 JAR 包(x=解压)
  54. 解压到 dist 目录
  55. 打包可执行 JAR(需配置 MANIFEST.MF)
  56. 4. javadoc:生成 API 文档
  57. 生成单个类的文档(-d 指定输出目录)
  58. 生成整个包的文档
  59. 5. jdb:简易调试工具(命令行断点调试)
  60. 编译时保留调试信息
  61. 启动调试
  62. 核心调试命令
  63. 四、JDK 内置工具实战(排查问题 / 性能调优)
  64. 1. 进程 / 内存 / GC 工具(服务器必备)
  65. 2. 可视化分析工具
  66. (1)jconsole(基础监控)
  67. (2)jvisualvm(深度分析)
  68. 3. 反编译 / 依赖分析工具
  69. (1)javap:反编译.class 文件
  70. 反编译 Hello.class(查看字节码)
  71. 查看类的详细信息(常量池、方法等)
  72. (2)jdeps:分析依赖
  73. 分析 JAR 包依赖的模块
  74. 分析类依赖的 JAR 包
  75. 五、Java 项目编译打包全流程(实操示例)
  76. 1. 项目目录结构
  77. 2. 核心操作步骤
  78. 1. 编译源码(指定编码、输出目录、依赖)
  79. 2. 生成 API 文档
  80. 3. 打包可执行 JAR
  81. 4. 运行 JAR 包
  82. 六、JDK 多版本管理(解决版本兼容)
  83. 1. Windows 系统
  84. 2. Linux 系统
  85. 列出已安装的 JDK 版本
  86. 输入对应编号,回车切换
  87. 3. MacOS 系统
  88. 安装 jenv
  89. 配置 jenv 到环境变量
  90. 添加 JDK 到 jenv
  91. 切换版本
  92. 七、常见问题排查与解决方案
  93. 1. java/javac: command not found
  94. 2. 编译报错「编码 GBK 的不可映射字符」
  95. 3. ClassNotFoundException/NoClassDefFoundError
  96. 4. 运行 JAR 包报错「Could not find or load main class」
  97. 5. 内存溢出(OOM)
  98. 八、JDK 使用最佳实践
  99. 总结

更多推荐文章

查看全部
  • Chromium 144 Windows 编译指南:Git 安装与配置
  • 医疗咨询机器人安全加固:Qwen3Guard-Gen-WEB 实践
  • 基于宝塔面板的 OpenClaw 生产环境部署与安全优化
  • Trae 中 Git 本地仓库初始化与管理指南
  • Git 代码上传至 GitHub 完整指南
  • DSO.ai:Synopsys 基于 AI 的搜索优化型 EDA 工具解析
  • 飞算 JavaAI:面向 Java 开发的智能编程助手
  • 开源分享:AI Agent Skills 资源合集,一键安装 Cursor/Claude Code/Copilot 技能包
  • GTC 2026 中国 AI 企业集体亮相:从技术跟随到全球并跑
  • 基于 C++ 与 SFML 的 2026 新春烟花模拟程序
  • ProtonVPN iOS/Mac 应用项目结构及配置教程
  • C++ 继承入门:从概念定义到默认成员函数详解
  • 多智能体近端策略优化(MAPPO)算法详解
  • 海康机器人 3D 激光轮廓仪快速调试
  • SQL Server 2025 数据库安装指南
  • Docker 部署 AI 量化分析平台:环境配置与波浪理论实战
  • C++ 模板进阶:特化、萃取与可变参数模板
  • Python 实现炸金花游戏的核心逻辑与代码示例
  • 秋招无 Offer,春招逆袭指南与面试核心要点
  • 基于 Vite7+Vue3+Arco 实现的 DeepSeek R1 风格流式 AI 聊天系统

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online