为什么Java 9不会简单地将类路径上的所有JAR转换为自动模块?

Dan*_*iel 7 java java-platform-module-system java-9

为了理解我们的类别:

  • 平台显式模块
  • 应用显式模块
  • 打开模块
  • 自动模块
  • 未命名的模块

类路径中的所有类和jar都将是未命名模块的一部分.但为什么我们需要什么呢?自动模块的优势在哪里?我可以"要求"那些该死的传统罐子,使它们成为一个自动模块.我没有把它包括在内吗?

Nic*_*lai 10

至少有两个原因:

  • 正如常规模块一样,自动模块会被模块系统怀疑某些检查,例如不拆分包.由于类路径上的JAR可以(并且偶尔会)拆分包,因此强制检查它们将是向后兼容的并且会破坏许多应用程序.
  • 未命名的模块可以读取所有平台模块,而自动模块只能读取那些进入模块图的模块.这意味着需要java.desktop模块(例如)的JAR 将从类路径开始工作,但不能从模块图中工作,除非java.desktop也将其放入图形中(通过依赖项或--add-modules).

我现在没时间检查第二个,但这就是模块系统状态所说的:

因此,在解析模块图之后,使自动模块读取每个其他命名模块,无论是自动还是显式

解决方案适用于声明的依赖项,自动模块声明无.