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

Eclipse环境下Java模块requires transitive配置不生效问题

问题原因分析

requires transitive的传递性有明确的作用边界:当模块X声明requires transitive 模块Y时,所有依赖模块X的其他模块,可以自动获得模块Y的可读权限。但这个传递只会传递模块Y自身显式用transitive声明的公开依赖,不会传递模块Y的普通私有requires依赖。

对应到你的场景问题根源非常明确:

  • javaModuleA中对interfacesModule的依赖是普通的requires interfacesModule,属于javaModuleA的内部私有依赖,不会传递给依赖javaModuleA的其他模块
  • 你在mainModule中声明的requires transitive javaModuleA,作用是把javaModuleA本身暴露给mainModule的下游消费者,不会帮你把javaModuleA的私有依赖interfacesModule引入到mainModule的可读范围内
  • 所以注释掉mainModule里的requires interfacesModule后,mainModule没有权限读取interfacesModule下的类,自然会报MyInterface不可访问的错误。

修复方案

修改javaModuleA的模块声明,把对interfacesModule的依赖改为transitive公开传递即可:

module javaModuleA {
    requires transitive interfacesModule;
    exports com.my.moduleA;
}

修改后所有依赖javaModuleA的模块,都会自动获得interfacesModule的可读权限,此时你可以删掉mainModule里的requires interfacesModule声明,程序也能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:57:04