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

JDK9中添加java.xml.ws模块可编译依赖javax.annotation类的原因探究

为什么添加java.xml.ws模块能编译依赖javax.annotation.Generated的代码?

这其实是JDK 9模块系统里一个容易被忽略的自动模块依赖传递特性导致的,咱们一步步拆解这个现象:

1. java.xml.ws的隐式依赖关系

虽然从模块声明的表面来看,java.xml.ws没有直接声明依赖java.xml.ws.annotation,但JDK 9中的Java EE相关模块大多属于自动模块(Automatic Module)——也就是没有module-info.java的旧JAR包被模块系统自动识别的模块。

java.xml.ws的MANIFEST.MF文件里其实声明了对java.xml.ws.annotation的依赖,当你用--add-modules java.xml.ws时,模块系统会自动解析这个模块的依赖链,把java.xml.ws.annotation也加入到模块图中。

2. 自动模块的特殊行为

自动模块有两个关键特性刚好解释了这个现象:

  • 自动模块会自动导出所有包含的包;
  • 自动模块会自动解析并依赖它在MANIFEST.MF中声明的所有模块,或者说,会依赖所有能找到的其他自动模块。

所以当你添加java.xml.ws时,它的依赖java.xml.ws.annotation会被自动拉入模块图,原本不可见的javax.annotation包也就变得可以被你的代码访问了。

3. 错误提示的补充说明

错误提示建议你直接添加java.xml.ws.annotation,这是最直接的解决方案,但你用java.xml.ws也能生效,本质上是借助了自动模块的依赖传递,间接引入了需要的模块。

你可以用jdeps工具验证这个依赖关系,执行命令:

jdeps --module-path "c:\Program Files\Java\jdk-9.0.1\jmods" --describe-module java.xml.ws

在输出里你会明确看到java.xml.ws确实依赖java.xml.ws.annotation模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:30