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

使用jdeps构建Spring Boot最小JRE时提示java.annotation模块未找到

问题根因
  • java.lang.module.FindException: Module java.annotation not found:Java 9及以上版本已将java.xml.ws.annotation(包含java.annotation相关API)从标准模块中移除,而org.apache.tomcat.embed.core依赖仍在声明对该模块的需求。
  • com.sun.tools.jdeps.MultiReleaseException:一方面是你使用的部分第三方依赖为多版本JAR,内置了适配不同Java版本的Class文件,jdeps无法自动兼容所有版本的类定义;另一方面是你之前的jdeps命令中--module-path target/lib/*写法错误,shell会将通配符展开为多个独立路径,导致jdeps参数解析异常。
修复方案
  1. 修正jdeps执行命令
    替换原有命令为以下写法,补充缺失模块声明、修正路径参数:
jdeps \
  --ignore-missing-deps \
  --print-module-deps \
  --multi-release 17 \
  --class-path "target/lib/*" \
  --add-modules java.xml.ws.annotation,jdk.unsupported \
  target/errorrr-*.jar

如果使用Java 11,将--multi-release参数值改为11即可。

  1. 多版本JAR报错补充修复
    如果执行上述命令仍抛出MultiReleaseException,可将--multi-release参数值改为base,强制jdeps使用JAR包的基础版本类文件进行分析,跳过版本适配的特殊类。

  2. 构建最小JRE
    拿到jdeps输出的模块依赖列表后,执行jlink命令生成自定义JRE,注意手动补充java.xml.ws.annotation模块:

jlink \
  --no-header-files \
  --no-man-pages \
  --compress=2 \
  --strip-debug \
  --add-modules [jdeps输出的模块列表],java.xml.ws.annotation \
  --output ./minimal-jre

按此方案构建的JRE体积可控制在80MB以内,和你不引入web依赖时的体积差异很小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03