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

未导出的Java包能否被未命名模块访问?权限控制疑问

关于Java模块系统包访问限制的问题解答

你的操作没有问题,这是Java模块系统的设计规则导致的:

  • 未命名模块(没有module-info.java的项目)不受模块导出规则约束。当你的依赖项目是未命名模块时,JVM会把引入的模块化JAR当作传统类路径下的普通JAR处理,不会检查module-info.java里的导出声明,所以能访问org.test.b这类未导出的包。
  • 只有当依赖项目也成为显式模块(添加module-info.java并声明对test模块的依赖)时,模块系统才会强制执行导出规则,此时访问未导出的org.test.b就会触发你看到的编译错误。

至于你疑惑的JDK内部包(比如jdk.internal.misc.Unsafe)的情况,这是因为JDK本身是特殊的模块化实现:
JDK的模块在启动时默认启用了严格的封装机制,即使是未命名模块,也无法访问JDK模块中未导出的内部包。这是JDK为了保证自身内部API安全特意做的限制,和普通自定义模块的兼容模式逻辑不同。

如果想要严格限制自定义模块的包访问,唯一的办法是让所有依赖该模块的项目都使用显式模块(即添加自己的module-info.java)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:25:21