有一种机制可以将常规 jar 转换为自动模块,从java-9, 通过简单地将其放置到modulepath而不是classpath. 自动模块具有以下属性:
自动模块是隐式定义的命名模块,因为它没有模块声明。因此,自动模块中的每个包都被视为已导出,即使它实际上可能仅用于内部使用。
因此,自动模块内的所有包都可用。但是,如果我们使用指令检查自动模块,则输出--describe-module中没有exports部分。
例如一个自动模块 main
jar --file main.jar --describe-module
com.foo jar:file:///.../code/module/main.jar/!module-info.class
requires java.base mandated
contains com.foo
如果无论如何都认为包被导出,为什么没有exports部分?com.foo我觉得这有点令人困惑:--describe-module表明没有导出的包,但同时,main它是一个自动模块,因此所有内容都是隐式导出的。
慕沐林林
相关分类