项目拼图与 Maven

Project Jigsaw vs Maven

来自Jigsaw Project

Make it easier for developers to construct and maintain libraries and large applications, for both the Java SE and EE Platforms.

我正在尝试了解 Jigsaw 是什么项目,到目前为止,Project Jigsaw 的目标似乎与我们使用 Maven(或 Gradle)依赖项管理所做的工作有些重叠:

非常简单的答案

Jigsaw 之后,public 将仅在 JAR 范围内 public。要在 JAR 外部查看 class,必须将其导出。

Java 将强制模块化,因为任何模块间交互都必须在 module-info 文件中指定。

例如,如果您生成一个 WAR 它几乎保持不变,但 WAR 中的所有 JAR 包必须定义一个模块信息(或不定义它并被视为自动或未命名的模块)。

Maven 有两个主要特性:依赖管理和构建:

  • 依赖管理意味着 Maven 可以确定库的版本 并从存储库下载它们。
  • 构建意味着 Maven 可以编译代码并将其打包成工件。

总结一下:Maven还是会负责构建,但是一定要学会用Jigsaw模块编译打包。

模块绝不会对构建工具构成威胁。模块补充构建工具,因为构建工具构建构建时工件及其版本的依赖关系图,而模块强制artifacts/modules的依赖关系(不包括版本)在构建时和 运行 时。

来自State of the Module System

"A module’s declaration does not include a version string, nor
constraints upon the version strings of the modules upon which it
depends. This is intentional: It is not a goal of the module system
to solve the version-selection problem, which is best left to build
tools and container applications."