49

来自拼图项目

让开发人员更轻松地为 Java SE 和 EE 平台构建和维护库和大型应用程序。

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

  • 构建像 Maven 这样的工具是一种威胁吗?
  • 或者我的理解是错误的,Jigsaw 项目将以某种方式补充这些构建工具?
4

2 回答 2

41

非常简单的答案

Jigsaw之后,public将仅在 JAR 范围内公开。要查看 JAR 之外的类,必须将其导出。

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

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

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

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

总结:Maven 仍将负责构建,但必须学习如何使用 Jigsaw 模块进行编译和打包。

于 2016-10-04T07:54:41.313 回答
14

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

模块系统的状态

"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."
于 2016-10-04T09:43:32.207 回答