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

sbt-native-packager中JlinkPlugin报paranamer模块找不到错误如何解决?

根因说明

报错本质是paranamer 2.8属于传统非模块化Jar包,没有内置module-info.class描述文件,jlink进行模块解析时无法识别它的模块名,哪怕路径已经正确添加到jlinkModulePath也会提示找不到模块。

可行解决方法

  • 方案一(最推荐,适配90%以上场景):全局排除jackson-module-paranamer依赖
    绝大多数Play 2.8.x应用运行不需要paranamer模块的功能,可以直接在build.sbt中排除该传递依赖,从根源消除报错:
excludeDependencies ++= Seq(
  ExclusionRule("com.fasterxml.jackson.module", "jackson-module-paranamer")
)

修改后重新执行打包命令即可,不会影响应用常规功能。

  • 方案二(需要保留paranamer功能时使用):显式声明自动模块名
    如果你的业务逻辑确实依赖paranamer的功能,可以在现有配置的基础上,添加一行jlinkModules配置,显式告诉jlink要加载的非模块化jar的自动模块名:
// 保留你原有jlinkModulePath配置不变,新增以下配置
jlinkModules += "paranamer"

同时建议检查Coursier缓存路径是否存在中文、空格等特殊字符,Windows下特殊字符可能会导致jlink路径解析失败,可将Coursier缓存迁移到纯英文无特殊字符的路径下重试。

  • 方案三(兼容兜底方案):绕过JlinkPlugin内嵌JDK
    如果以上方案都不适用,可以放弃使用JlinkPlugin生成精简JDK,改为手动提前准备好适配的精简JDK,放到项目的固定资源目录中,通过sbt-native-packager的通用打包配置将JDK目录整体打进安装包,再修改启动脚本中的Java执行路径指向内嵌的JDK目录即可。这种方案规避了jlink的模块解析限制,兼容性更强,适合依赖结构复杂的老项目。

内容的提问来源于stack exchange,提问作者FunProg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:00:07