JPMS模块解析过程中module.a binds module.b的含义是什么?
相关问题解答
日志行实际含义
你看到的base.service binds user.service file://.../user-service/target/classes/是OpenJDK JPMS实现的内部调试输出内容,不属于JLS规范定义的公开术语,因此你在官方规范文档中找不到对应说明。
这行输出的实际意思是:服务消费模块base.service已经成功识别并绑定了服务提供模块user.service,当前生效的user.service模块对应的物理资源路径为日志中给出的target/classes目录。
自动模块解析的差异触发场景
当你分别将jar包、未打包的classes目录放入模块路径时,触发这类绑定行为差异的常见场景如下:
- classes目录下存在
module-info.class显式模块声明,会被识别为正式命名模块,服务绑定严格遵循声明的provides、uses规则,匹配成功就会输出对应bind日志 - 同代码打包为jar后如果没有保留
module-info.class,会被识别为自动模块,自动模块的服务扫描、绑定规则和显式命名模块存在差异,匹配失败就不会输出对应日志 - 打包过程中如果丢失了
META-INF/services下的服务提供者配置文件,也会导致jar包和classes目录的服务绑定逻辑不一致,出现仅classes目录下有该输出的情况
内容的提问来源于stack exchange,提问作者Naman
相关产品推荐
相关产品推荐

