JDK11安装后如何手动生成JRE文件?Win10环境详细教程
JDK 11 安装后手动生成JRE深入解析与Windows 10实战指南如果你最近在Windows 10上安装了JDK 11可能会发现一个与以往版本不同的现象安装目录里找不到熟悉的jre文件夹了。这并非安装错误而是从JDK 9开始Oracle对Java的打包和分发策略进行了重大调整。对于某些特定场景比如运行一些依赖传统JRE结构的桌面应用或遗留工具手动生成一个独立的JRE仍然有其实际价值。今天我们就来彻底搞懂JDK 11中JRE“消失”的背后原因并手把手带你通过几种不同的方法在Windows 10环境下灵活地生成所需的JRE运行时环境。1. 理解JDK 11的模块化变革与JRE的“消失”在JDK 8及更早的版本中安装JDK后你会在安装目录下同时获得jdk和jre两个子目录。这种结构清晰地将开发工具编译器、调试器等与运行时环境分离开来。然而从JDK 9引入的模块化系统Project Jigsaw开始这一传统模式被彻底改变。核心变化在于JDK 11不再默认捆绑一个完整的、独立的JRE目录。取而代之的是JDK自身已经是一个高度模块化的运行时环境。当你执行java命令时它直接使用JDK内部的模块来运行程序。这种设计带来了几个显著优势更小的分发体积应用程序可以只包含其真正依赖的Java模块而不是整个JRE。更强的封装性模块化边界明确了公共API和内部实现提升了安全性和可维护性。简化的部署为创建定制化的运行时镜像提供了官方工具支持。那么为什么我们有时仍需要手动生成JRE呢主要原因有以下几点遗留应用兼容性一些较老的Java桌面应用、企业级软件或开发工具如某些版本的Weka、Eclipse插件等在启动脚本或配置中硬编码了指向JAVA_HOME/jre/bin/java的路径。缺少jre目录会导致它们启动失败。权限与安全策略在生产服务器上运维团队可能希望严格区分“开发环境”JDK包含编译器等可能带来安全风险的组件和“运行环境”JRE仅包含运行程序必需的模块。手动生成一个纯净的JRE有助于实施最小权限原则。磁盘空间优化对于仅用于运行Java应用的服务器一个裁剪过的、仅包含必要模块的JRE镜像比完整的JDK体积更小。为了更直观地理解JDK 8与JDK 11在结构上的差异可以参考下面的对比表格特性/组件JDK 8 及以前JDK 11 及以后JRE目录默认随JDK安装生成 (JDK_HOME/jre)不再默认生成需手动创建模块系统无基于类路径Classpath默认启用模块路径Modulepath运行时组成完整的JRE所有Java SE类库模块化的JDK可按需组装运行时创建JRE的工具无独立需求jlink工具Java链接器环境变量CLASSPATH通常需要配置对于纯模块化应用非必需典型应用场景运行传统jar包或Web应用运行模块化应用或创建定制运行时注意jlink工具是JDK 9及以上版本引入的专用于生成定制化的Java运行时镜像。它正是我们手动生成JRE的核心武器。2. 准备工作确认JDK 11安装与环境变量在开始生成JRE之前我们必须确保JDK 11已正确安装且环境变量配置无误。这是所有后续操作的基础。首先打开命令提示符CMD或Windows Terminal执行以下命令来验证Java的安装状态java -version如果安装正确你将看到类似如下的输出明确显示版本为“11.x.x”java version 11.0.19 2023-04-18 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.199-LTS-224) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.199-LTS-224, mixed mode)接下来检查关键的编译命令javac是否可用javac -version正常情况应返回javac 11.0.19等信息。如果java命令有效而javac命令报错“不是内部或外部命令”这通常意味着环境变量Path配置不完整。配置JAVA_HOME与Path变量在Windows搜索栏输入“环境变量”选择“编辑系统环境变量”。在“系统变量”部分点击“新建”。变量名JAVA_HOME变量值你的JDK 11安装根目录例如C:\Program Files\Java\jdk-11.0.19找到并选中“系统变量”中的Path变量点击“编辑”。点击“新建”添加一项%JAVA_HOME%\bin重要检查Path变量中是否存在旧版本Java或Oracle自动添加的路径如C:\ProgramData\Oracle\Java\javapath。如果存在建议将其删除或确保%JAVA_HOME%\bin的位置在其之前以避免命令解析冲突。依次点击“确定”保存所有更改。为了使新的环境变量立即在当前命令提示符窗口生效你需要关闭并重新打开一个新的命令提示符窗口然后再次执行java -version和javac -version进行验证。3. 核心方法使用 jlink 工具生成定制化JREjlink是JDK自带的强大工具它允许你基于模块化系统创建一个只包含应用程序所需模块的、精简的Java运行时镜像。我们将用它来生成一个功能等同于传统JRE的运行时环境。第一步定位JDK安装目录并打开命令行找到你的JDK 11安装目录例如C:\Program Files\Java\jdk-11.0.19。在此目录下按住Shift键的同时点击鼠标右键选择“在此处打开PowerShell窗口”或“在此处打开命令窗口”。第二步理解并执行 jlink 命令一个最基础的、能运行大多数标准Java SE应用程序的JRE需要包含java.desktop模块它包含了AWT, Swing等GUI组件以及许多基础类库。执行以下命令bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre-custom让我们拆解这个命令的每个部分bin\jlink.exe调用jlink工具。--module-path jmods指定模块路径告诉jlink去哪里查找模块文件.jmod。JDK的jmods目录包含了所有Java SE模块。--add-modules java.desktop指定要包含到新运行时中的模块。java.desktop是一个聚合模块依赖了众多基础模块。--output jre-custom指定输出目录的名称。这里我们生成一个名为jre-custom的文件夹。命令执行成功后你会在当前目录下看到一个全新的jre-custom文件夹。其内部结构类似于传统的JRE包含bin、conf、lib等子目录。其中bin\java.exe就是运行时启动器。第三步验证生成的JRE进入生成的JRE目录并测试其功能cd jre-custom\bin .\java -version你应该能看到Java版本信息证明这个自定义的JRE已经可以独立工作。进阶创建更精简或功能更全的JREjlink的强大之处在于其灵活性。你可以根据实际需求增减模块。创建更基础的JRE无GUI支持如果你的应用是命令行程序或服务端应用不需要图形界面可以只添加核心模块。bin\jlink.exe --module-path jmods --add-modules java.base --output jre-minimal这个jre-minimal体积会小很多但无法运行依赖java.desktop等模块的Swing程序。创建功能更全面的JRE如果你知道应用依赖了其他模块比如数据库连接java.sql、XML处理java.xml等可以一并添加。bin\jlink.exe --module-path jmods --add-modules java.desktop,java.sql,java.xml --output jre-full模块名之间用逗号分隔。提示要查看JDK中包含的所有模块可以在JDK的bin目录下运行命令.\java --list-modules。这有助于你确定需要打包哪些模块。4. 替代方案与高级技巧除了标准的jlink命令还有一些其他方法和技巧可以帮助你更好地管理Java运行时。使用 jdeps 分析依赖并自动生成模块列表对于已有的JAR包应用手动确定其依赖模块可能很繁琐。jdeps工具可以帮你分析。例如分析一个名为myapp.jar的应用程序bin\jdeps.exe -s myapp.jar-s参数会生成简化的依赖摘要。你可以根据输出将所需的模块名添加到jlink的--add-modules参数中。更自动化的方式是使用jdeps生成模块列表文件bin\jdeps.exe --print-module-deps myapp.jar deps.txt然后让jlink读取这个文件bin\jlink.exe --module-path jmods --add-modules $(cat deps.txt) --output jre-for-myapp注意Windows命令提示符不支持$(cat deps.txt)这种语法你需要手动将deps.txt文件中的内容复制到命令中或者使用PowerShell的Get-Content命令来替代。将生成的JRE加入系统路径如果你希望像使用系统级JRE一样在任何位置都能使用自定义的JRE可以将其bin目录添加到用户的Path环境变量中。但更常见的做法是在应用程序的启动脚本中直接指定JRE路径这样可以实现应用与运行时的捆绑避免污染全局环境。处理非模块化JAR传统类路径应用jlink生成的是模块化运行时。对于传统的、基于类路径Classpath的非模块化JAR应用它们默认需要完整的Java SE模块。一个安全的做法是添加ALL-MODULE-PATH模块这是一个特殊的聚合模块在较新JDK版本中可用或者添加所有你认为可能需要的模块。更简单直接的方法是使用jlink生成包含java.se聚合模块的JRE如果jmods目录下有java.se.jmod但这可能包含了过多模块。在实践中对于复杂的老应用使用--add-modules ALL-MODULE-PATH可能是最省事的但这会生成一个较大的运行时。bin\jlink.exe --module-path jmods --add-modules ALL-MODULE-PATH --output jre-all-modules版本管理与多JRE共存你可以在同一台机器上用jlink为不同应用生成多个不同版本的JRE基于同一个JDK 11或者基于不同版本的JDK生成JRE。管理它们的关键是为每个应用配置独立的启动脚本在脚本中通过绝对路径指向其专属的JRE。例如创建一个start-myapp.bat批处理文件echo off REM 设置应用专属的JRE路径 set MYAPP_JREC:\tools\myapp\jre-custom\bin\java.exe REM 启动应用 %MYAPP_JRE% -jar myapp.jar这种方式彻底解耦了应用与系统Java环境避免了版本冲突是持续集成和部署中推荐的做法。5. 常见问题排查与最佳实践在手动生成和使用JRE的过程中你可能会遇到一些问题。下面是一些常见情况的排查思路和解决方案。问题1执行jlink命令时提示“找不到模块”症状Error: Module XXX not found原因--add-modules参数指定的模块名错误或者--module-path指向的路径不正确未包含jmods目录。解决使用.\java --list-modules确认正确的模块名。确保在JDK安装根目录下执行命令或者使用绝对路径指定--module-path如--module-path C:\Program Files\Java\jdk-11.0.19\jmods。问题2生成的JRE无法运行特定程序症状使用自定义JRE启动程序时抛出ClassNotFoundException或NoClassDefFoundError。原因生成的JRE镜像中缺少程序所依赖的某个Java模块。解决使用jdeps工具详细分析程序的依赖bin\jdeps.exe -v your-app.jar。将缺失的模块添加到jlink命令的--add-modules列表中重新生成JRE。对于非常复杂或依赖不明的老程序考虑使用ALL-MODULE-PATH生成一个全模块JRE作为测试基准。问题3环境变量冲突导致命令执行混乱症状配置了JAVA_HOME和Path后java -version显示的版本不是JDK 11。原因系统Path变量中可能存在多个Java路径如旧版本JDK/JRE、Oracle自动安装的公共路径C:\ProgramData\Oracle\Java\javapath。解决在“环境变量”设置中仔细检查系统Path变量。将%JAVA_HOME%\bin项移动到列表的最顶端确保其拥有最高优先级。删除或注释掉其他不必要的Java路径。最佳实践总结明确需求不要盲目生成JRE。首先确认你的应用是否真的需要一个独立的JRE目录。许多现代应用和工具已经适配了直接从JDK运行。精准裁剪使用jlink时尽量只添加应用必需的模块这能生成更小、更安全的运行时镜像尤其适合容器化部署。版本固化为生产环境的应用生成专属JRE时记录下所用的JDK具体版本号如11.0.19和jlink命令参数。这能保证运行环境的一致性。集成到构建流程在Maven或Gradle构建脚本中可以集成jlink任务在打包应用的同时生成对应的定制化JRE实现一键式分发。安全考虑定期关注Oracle官方或你使用的JDK发行版提供商如Adoptium、Amazon Corretto、Microsoft Build of OpenJDK的安全更新。当JDK有安全补丁时需要基于新版本的JDK重新生成JRE。手动生成JRE从JDK 11开始成为一项开发者应该掌握的技能。它不仅仅是解决一个目录缺失的问题更是理解和运用Java模块化系统、优化应用部署的起点。

相关新闻

PostgreSQL-devel在CentOS7上的安装与配置:从零到生产环境

PostgreSQL-devel在CentOS7上的安装与配置:从零到生产环境

PostgreSQL-devel在CentOS 7上的深度部署指南:从依赖解析到生产级调优 如果你正在CentOS 7上为生产环境部署PostgreSQL,并且需要编译扩展、进行深度定制,那么postgresql-devel包就是你绕不开的一环。这不仅仅是多装几个开发头文件那么简单&am…

2026/5/17 11:38:35 阅读更多 →
2026大专大数据科学毕业生就业:难度、规划与破局之路

2026大专大数据科学毕业生就业:难度、规划与破局之路

亲爱的2026届大数据科学专业的同学们:面对即将到来的职业生涯起点,你们对未来的期待与对竞争的思虑是完全正常的。本文旨在客观分析当前就业市场的结构性特点,并为专科背景的同学提供一份聚焦于能力构建与职业准备的系统性路径参考。大数据专…

2026/5/17 5:17:50 阅读更多 →
rrweb实战:如何通过前端录制精准捕获用户行为轨迹

rrweb实战:如何通过前端录制精准捕获用户行为轨迹

1. 为什么我们需要像“录像机”一样记录用户操作? 想象一下,你是一个在线购物网站的产品经理。最近你发现,商品详情页的“加入购物车”按钮点击率异常低,但后台数据显示这个页面流量并不少。问题出在哪里?是按钮颜色不…

2026/5/17 11:38:32 阅读更多 →

最新新闻

AI辅助工具如何提升毕业论文答辩效率

AI辅助工具如何提升毕业论文答辩效率

1. 毕业论文答辩AI辅助工具全景解析作为一名经历过三次学术答辩的老兵,我深知准备过程中的痛点:文献梳理耗时、问题预测不准、表达不够学术化。传统方式下,仅整理答辩问题就需要2-3周时间。而现在,AI工具已经能将这个流程压缩到3天…

2026/7/4 23:23:10 阅读更多 →
SysML v2:打破传统系统建模瓶颈,实现工程设计的智能协作

SysML v2:打破传统系统建模瓶颈,实现工程设计的智能协作

SysML v2:打破传统系统建模瓶颈,实现工程设计的智能协作 【免费下载链接】SysML-v2-Release The latest incremental release of SysML v2. Start here. 项目地址: https://gitcode.com/gh_mirrors/sy/SysML-v2-Release 当您面对复杂的系统工程时…

2026/7/4 23:23:10 阅读更多 →
如何实现微信聊天记录永久保存:3步完成数据备份与智能分析

如何实现微信聊天记录永久保存:3步完成数据备份与智能分析

如何实现微信聊天记录永久保存:3步完成数据备份与智能分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…

2026/7/4 23:21:09 阅读更多 →
从TT100K到YOLO:一份完整的交通标志数据集转换与实战指南

从TT100K到YOLO:一份完整的交通标志数据集转换与实战指南

1. 为什么需要转换TT100K数据集格式第一次接触TT100K数据集时,我完全被它复杂的目录结构和标注格式搞懵了。这个由清华大学和腾讯联合发布的交通标志数据集,包含了10万张图片和3万多个标注实例,但它的JSON标注格式和YOLO完全不兼容。当时为了…

2026/7/4 23:19:08 阅读更多 →
数据科学转行实战路径:问题驱动的认知构建法

数据科学转行实战路径:问题驱动的认知构建法

1. 这不是一张“通关地图”,而是一份我带过37个转行学员后画出的实战路标 数据科学学习路径——这个词听起来像一份标准化的课程表,但实际操作中,它更接近于在浓雾里徒步时手绘的地形草图:有标记、有涂改、有折痕,甚至…

2026/7/4 23:19:08 阅读更多 →
2026普通人AI使用指南:看懂参数、混合思考与国产模型三大核心

2026普通人AI使用指南:看懂参数、混合思考与国产模型三大核心

1. 这不是科幻预告片,是普通人下周就该打开手机查的“技术天气预报”2026年4月这个时间点,听起来像科幻小说里随手写的年份,但如果你最近刷过几条国产大模型发布会的短视频,或者留意过身边朋友突然开始用“文心一言新版本”写周报…

2026/7/4 23:17:06 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻