不一定。是否必须安装 JDK(Java Development Kit)取决于你的部署方式和应用运行环境。
1. 不需要安装 JDK 的场景
如果你只是运行已编译好的 Java 应用(即 .jar、.war 等文件),服务器上只需要安装 JRE(Java Runtime Environment) 或更现代的 JDK 中的运行时部分(自 Java 9 起,JDK 包含 JRE,但通常只需运行时环境即可)。
- 传统方式:单独安装 JRE(如
jre-8uXXX),但 Oracle 已不再免费提供独立 JRE 下载,现在普遍直接安装轻量级 JDK(仅含运行时)。 - 现代推荐:安装 JDK 的运行时模式(例如使用
--release参数构建的应用可指定最低运行时版本),或直接使用容器化方案(见下文)。
✅ 关键点:运行 Java 应用需要的是 JVM(Java Virtual Machine),而 JDK 包含 JVM + 开发工具(编译器 javac 等)。只要不编译代码,就不需要完整的 JDK 开发功能。
2. 必须安装完整 JDK 的场景
以下情况通常需要完整 JDK:
- 动态编译脚本:如某些框架在启动时动态生成/编译代码(较少见)。
- CI/CD 流水线中直接打包:如果服务器同时承担构建任务(如执行
mvn package或gradle build)。 - 调试或热更新:需要
jdb、jstack等诊断工具,或某些 APM X_X依赖 JDK 接口。 - 遗留系统:旧版应用可能依赖特定 JDK 版本且未分离运行时。
3. 最佳实践建议
| 场景 | 推荐方案 |
|---|---|
| 纯生产环境部署 | 安装 最小化 JDK(如 OpenJDK 17 的 runtime-only 包)或使用 JLink 定制运行时镜像(体积更小,无开发工具) |
| 容器化部署 | 使用官方精简镜像(如 eclipse-temurin:17-jre-alpine),无需显式安装 JDK/JRE |
| 云原生环境 | 通过 Kubernetes 挂载运行时镜像,避免宿主机安装任何 Java 组件 |
💡 注意:从 Java 9 开始,Oracle 将 JRE 整合进 JDK,因此“只装 JRE"的方案已逐渐淘汰。现在最稳妥的做法是:安装一个不含开发工具的轻量级 JDK 运行时(例如通过
apt install openjdk-17-jre-headless或yum install java-17-openjdk-headless)。
总结
- 运行应用 ≠ 需要 JDK → 实际需要的是 JVM 运行时环境。
- 生产环境优化:优先选择 headless/jre-headless 版本 或 容器化方案,减少攻击面和资源占用。
- 例外情况:若涉及动态编译、调试或构建流程,则需完整 JDK。
根据具体需求选择合适方案,既能满足运行要求,又能提升安全性和效率。
云小栈