You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:05:06