如何使用launch4j打包Java 9应用?打包后提示未安装JRE 1.9.0
解决Launch4j打包Java 9应用时的JRE检测错误问题
我之前也碰到过一模一样的情况,Launch4j在处理Java 9及以上版本的JRE识别时,确实有一些容易踩的坑——毕竟它默认的版本检测逻辑是基于Java 8及以前的命名规则设计的。下面是几个亲测有效的解决步骤:
1. 修正配置文件里的JRE版本参数
Launch4j的.xml配置文件中,<jre>节点的版本格式必须适配Java 9的命名规则:
- 别再用旧的
version="1.9.0",改成version="9+"(匹配所有9.x版本)或者具体的版本号比如version="9.0.4" - 同时添加
runtimeBits指定JRE位数(比如64或32/64),避免位数不匹配导致的检测失败
示例配置片段:
<jre> <path>../jre</path> <!-- 如果是捆绑JRE,这里填相对根路径 --> <version>9+</version> <runtimeBits>64</runtimeBits> </jre>
2. 确认捆绑JRE的目录结构(若有)
如果你是把JRE和exe一起分发,要注意Java 9的目录结构和Java 8不一样:
- Java 9的
bin文件夹直接在JRE根目录下,而非Java 8的jre/bin嵌套结构 - 所以配置里的
<path>必须指向JRE的根目录,不能是bin文件夹或旧的嵌套路径
3. 升级到Launch4j 3.14+版本
虽然你提到用的是当前版本,但部分较早的"当前版本"对Java 9的支持并不完善。建议确认你的Launch4j版本是否在3.14及以上——这个版本之后官方优化了Java 9+的版本检测逻辑,能更好识别新的JRE命名规则。
4. 手动指定JRE搜索路径(可选)
如果前面的方法都没生效,可以在<jre>节点里添加<searchPath>,强制Launch4j优先在指定路径查找JRE:
<jre> <version>9+</version> <searchPath>./jre</searchPath> <searchPath>../jre</searchPath> </jre>
这样能避免系统中其他版本JRE的干扰,确保找到符合要求的Java 9环境。
5. 用Test Wrapper功能排查问题
Launch4j GUI自带的"Test Wrapper"功能可以帮你快速定位问题:
- 加载你的配置文件后,点击左侧的"Test Wrapper"按钮
- 它会模拟exe启动时的JRE检测流程,输出详细日志,你可以根据日志里的错误信息精准排查
内容的提问来源于stack exchange,提问作者altralaser
相关产品推荐
相关产品推荐

