Mac OSX下jpackage打包Java项目遇FileSystemException文件名过长问题
jpackage打包Mac app出现无限嵌套目录导致文件名过长的解决方案
问题现象
使用JDK17的jpackage打包Java项目时,触发文件名过长错误,错误路径显示Boekhouding.app目录在自身内部无限嵌套:
java.nio.file.FileSystemException: /Users/cor/SoftwareProjects/Boekhouding/Desktop/Build/../Released/Boekhouding.app/Contents/app/Boekhouding.app/Contents/app/...: File name too long
该项目此前用JDK11的jpackage可正常打包,且相同命令在其他项目能正常运行。
问题原因
你的jpackage命令中输入目录与输出目录指向了同一个路径:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home" export PATH=$JAVA_HOME/bin:$PATH jpackage \ --type app-image \ -i ../Released \ # 输入目录:待打包文件的存放路径 -d ../Released \ # 输出目录:生成的app文件的存放路径 -n "Boekhouding" \ --app-version "1.3.7" \ --icon ../../Images/euro.icns \ --main-jar run.jar \ --verbose
JDK17的jpackage扫描输入目录时,会把刚生成的Boekhouding.app也纳入打包范围,导致循环嵌套生成新的.app目录,最终超出系统文件名长度限制。而JDK11的jpackage目录扫描逻辑不同,未触发该问题。
解决步骤
- 分离输入和输出目录:将输出目录改为与输入目录独立的路径,比如新建
../AppOutput目录作为输出目标:jpackage \ --type app-image \ -i ../Released \ -d ../AppOutput \ # 修改为独立的输出目录 -n "Boekhouding" \ --app-version "1.3.7" \ --icon ../../Images/euro.icns \ --main-jar run.jar \ --verbose - 清理残留文件:如果
../Released目录中已存在之前生成的Boekhouding.app,先删除该文件,避免打包时被误纳入输入内容。 - 验证打包结果:执行修改后的命令,检查输出目录下的
Boekhouding.app内部是否无嵌套的.app目录,确认打包正常。
内容的提问来源于stack exchange,提问作者Cor
相关产品推荐
相关产品推荐

