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

sbt native-packager运行jdeps报错:找不到java.activation模块求助

根因说明

该报错为Java 11+环境下的模块路径匹配问题:

  • Java 11已移除内置的java.xml.bind、java.activation等Java EE模块,你用到的jaxb-api是模块化Jar,其module-info.class中声明依赖的模块名为java.activation
  • 你引入的javax.activation:javax.activation-api属于Java EE阶段的旧版本包,未内置module-info.class,作为自动模块被识别时的模块名为javax.activation.api,和jaxb-api要求的模块名不匹配,因此jdeps扫描阶段会抛出找不到模块的错误。

修复方案

方案1:使用匹配模块名的激活框架依赖(推荐,不破坏原有依赖链)

  1. 移除之前自行添加的javax.activation:javax.activation-api依赖
  2. 在libraryDependencies中添加如下兼容依赖:
libraryDependencies ++= Seq(
  "com.sun.xml.bind" % "jaxb-impl" % "2.3.9",
  "com.sun.activation" % "javax.activation" % "1.2.0"
)

该版本的javax.activation包声明的模块名即为java.activation,完全匹配jaxb-api的依赖要求。
3. 若你在sbt native packager中开启了显式模块声明,需在jlink配置中追加对应模块:

jlinkModules += "java.activation"

方案2:排除冗余jaxb依赖(适合无需xml绑定功能的场景)

如果你的业务代码不会用到Pi4j传递引入的xml绑定能力,你当前排除javax.xml.bind的方案是安全的,不会导致运行缺失依赖,只需在依赖声明中显式标注排除即可:

libraryDependencies += "com.pi4j" % "pi4j-core" % "1.4" exclude("javax.xml.bind", "jaxb-api")

若后续运行真的出现类缺失报错,再补充方案1的依赖即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:45:05