JPackage打包exe失败且无限递归创建文件夹问题求助
问题根因分析
- 触发无限嵌套文件夹的核心原因是命令中
-i ""的参数配置错误:-i(--input)参数用于指定存放待打包资源(比如你的jar包)的目录,传入空值时,jpackage会默认将当前执行命令的工作目录全部内容作为输入资源拷贝到生成的应用镜像中。而jpackage生成的Test输出目录本身就在当前工作目录下,所以拷贝过程中会不断把生成到一半的Test目录递归拷贝进镜像的app子目录,最终导致路径超长报错。 - 之前exe打包失败、无产物/运行报错的问题也和这个错误有关:输入目录包含了大量无关的临时文件、嵌套目录,最终生成的安装包结构异常,运行时找不到主类或依赖就会触发Windows错误音后闪退。
修复方案
命令参数调整
单独新建一个文件夹仅存放你的Test.jar,比如命名为input,将Test.jar移入该目录,再执行命令即可,参考目录结构:
打包根目录/ ├─ input/ │ └─ Test.jar └─ temp/
在打包根目录执行对应命令即可:
# 生成便携应用镜像 jpackage -t app-image -n "Test" --temp "temp" --verbose -i "./input" --main-class "test.Main" --main-jar "Test.jar" --win-console # 生成exe安装包仅需修改-t参数即可 jpackage -t exe -n "Test" --temp "temp" --verbose -i "./input" --main-class "test.Main" --main-jar "Test.jar" --win-console
补充注意事项:
- 不要把temp目录、输出目录放到input目录下
- 可以额外添加
--dest参数指定输出文件的存放路径到当前工作目录之外,进一步避免递归拷贝风险 - Windows环境下建议用管理员权限运行CMD/PowerShell执行jpackage命令,避免权限不足导致的生成失败
超长嵌套文件夹清理方案
Windows资源管理器无法直接删除此类超长路径文件夹,可通过命令行快速清理:
- 打开PowerShell,进入嵌套文件夹的父目录
- 执行以下命令删除顶层嵌套文件夹(替换为你自己的文件夹路径):
Remove-Item -Path "C:\Users\mynem\Desktop\Nueva carpeta\test jpackage 3\Test" -Recurse -Force
如果上述命令仍报错,可通过robocopy覆盖方式清理:
# 新建空文件夹 mkdir empty # 用空文件夹同步覆盖要删除的嵌套文件夹,自动清空所有内容 robocopy empty Test /purge # 最后删除空文件夹和已经清空的Test目录即可 rmdir empty rmdir Test
内容的提问来源于stack exchange,提问作者Nemo_64
相关产品推荐
相关产品推荐

