1. JDK 17环境下JRE制作的意义与背景
自从Java 9引入模块化系统后,Oracle官方不再提供独立的JRE下载包。这个变化让很多习惯了传统部署方式的开发者感到不适应。在实际生产环境中,我们经常遇到只需要运行Java程序而不需要完整JDK的场景。比如嵌入式设备、客户端应用分发等场景,完整JDK的200MB+体积显得过于臃肿。
我最近在为一个物联网项目部署Java应用时,就遇到了必须精简运行时环境的问题。设备存储空间有限,使用完整JDK不仅浪费资源,还可能带来潜在的安全风险。通过制作定制化JRE包,最终将运行时环境从298MB缩减到45MB,效果非常显著。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备工作与环境配置
2.1 基础环境要求
首先确保你已经安装了JDK 17。可以通过以下命令验证:
bash复制java -version
预期输出应包含"17"的版本号信息。我推荐使用OpenJDK发行版,比如Amazon Corretto或Adoptium的版本,它们在长期支持方面做得比较好。
2.2 理解jlink工具
JDK 17中制作JRE的核心工具是jlink,它位于JDK的bin目录下。与传统的jre包不同,jlink生成的运行时是模块化的,只包含你指定的模块及其依赖。这种精准控制带来了三个显著优势:
- 体积大幅减小
- 启动速度更快
- 安全攻击面更小
3. 完整制作流程详解
3.1 确定所需模块
制作JRE的第一步是确定你的应用依赖哪些Java模块。假设我们有一个基于Spring Boot的应用,典型的核心模块包括:
bash复制java.base
java.logging
java.sql
java.naming
java.management
java.security.jgss
java.instrument
要列出JDK中所有可用模块:
bash复制java --list-modules
3.2 基本jlink命令
最基础的JRE制作命令如下:
bash复制jlink --add-modules java.base,java.logging \
--output ./myjre \
--strip-debug \
