我猜自动模块:
http://openjdk.java.net/projects/jigsaw/spec/sotms/#automatic-modules
意味着需要第三方jar的项目的每个模块都必须将该jar包装在其自己的模块化jar 中。如果是这种情况,那么大型多模块应用程序最终会比基于类路径的Java 8更大吗?我正在考虑所有几乎无处不在的apache库和其他常见的开源依赖项。
我将来获胜;所有这些第三方库本身都是模块化的,因此只需要分发最小配置。但是,在短期内,没有类路径,那里会不会有一些非常笨重的模块化罐子?或者我错过了什么?
答案 0 :(得分:4)
我认为您误解了自动模块的工作原理。它们的关键属性是您可以使用现有的非模块化JAR,将它们放在模块路径上,并将它们显示为编译模块或运行时。
我猜自动模块意味着需要第三方jar的项目的每个模块都必须将该jar包装在其自己的模块化jar中。
不,一点也不。恰恰相反,您重用现有的JAR。
答案 1 :(得分:1)
你的问题和评论意味着类路径消失了:它不是。
在解决自动模块之前,还有其他要理解的概念。
在Java 9中,类路径仍然存在,熟悉的传统jar(即非模块化jar)仍然有效。但是,还有一个包含模块化jar的新模块路径。
模块化jar包含module-info.class
,它非常明确地表明(a)作为依赖项所需的模块以及(b)导出哪些包。
关键点是类路径和模块路径之间的交互:
module-info.java
中的旧版jar。有了这么多信息,就不可能以零碎的方式模块化项目:如果应用程序jar需要第三方库,我们必须(a)等待库作者模块化或(b) )尝试自己模块化。两者都不是首发。
输入自动模块。它们是驻留在模块路径上的传统(非模块化)jar。它们充当类路径和模块路径之间的桥梁,因为:
This video和this video提供插图。