为什么Java 9不会简单地将类路径上的所有JAR转换为自动模块?
为了理解我们的类别:
- 平台显式模块
- 应用显式模块
-
打开模块 - 自动模块
- 未命名的模块
类路径中的所有类和jar都将是未命名模块的一部分。 但为什么我们需要呢? 自动模块的优势在哪里? 我可以“要求”那些该死的传统jar子,使它们成为一个自动模块。 我没有把它包括在内吗?
至少有两个原因:
- 正如常规模块一样,自动模块会被模块系统怀疑某些检查,例如不拆分包 。 由于类路径上的JAR可以(并且偶尔会)拆分包,因此强制检查它们将是向后兼容的并且会破坏许多应用程序。
- 未命名的模块可以读取所有平台模块,而自动模块只能读取那些进入模块图的模块。 这意味着需要java.desktop模块(例如)的JAR将从类路径开始工作,但不能从模块图中工作,除非java.desktop也将其放入图形中(通过依赖项或
--add-modules
)。
我现在没时间检查第二个,但这就是模块系统状态所说的:
因此,在解析模块图之后,使自动模块读取每个其他命名模块,无论是自动还是显式
解决方案适用于声明的依赖项,自动模块声明无。