参考网站:The State of the Module System,Java9模块系统的说明(翻译),Java9 中的 Module, ModulePath 和 ClassPath,Java 9 揭秘(4. 模块依赖)
- 每个java project中的根目录下都有一个module-info.java
- 模块名不可重复,因此建议采用类似包名的结构。
- <>中的名字需要是全限定名,不管是包名、类名或是接口名。
此外,在exports<package name>
中,java.lang
和java.lang.annotation
是不同的包,需要分开写,只写java.lang
则只能公开该包下的类,而不会公开java.lang.annotation下的类。
使用示例(以及Maven整合java9):https://www.jianshu.com/p/66c26dd3237f
requires public
module <module name> {
requires <module>;
requires public <module>;
exports <module>;
}
- A模块下可包括packagea、packageb、packagec包,如果要向其他模块公开packagea包,则需要用
exports packagea
。 - B模块如果要使用A模块,则需要使用
requires A
(同时还需要将该组件加入到项目->buildpath->Modulepath) - 接上,C模块即使引用了B模块
requires B
,也无法使用A模块中的内容。如果希望让C模块可以通过引用模块B,从而间接引用A模块,则需要在B模块中声明requires public A
,这称为隐式可读性(implied readability)。
requires static
module <module name>