IntelliJ IDEA 项目模块与 Java 9 模块的概念不同吗?

Is IntelliJ IDEA project Module different concept from Java 9 Module?

我从未在IntelliJ IDEA中使用过模块,但在Java中出现了9个模块(我也从未使用过但现在想研究这是什么)

那么问题来了:有匹配的吗?还是 IDEA 模块很久以前就出现了,目的不同?

这是一个类似的概念,早在 Java 9 个模块之前就出现了。它也不是 IDE 具体的。在处理由多个子项目组成的项目时,像 Maven 和 Gradle 这样的构建系统也会使用这个概念。在 IntelliJ IDE术语中,模块只是一个子项目(在 Eclipse 中,模块是一个项目,工作区可以有多个项目)。

Java 9 个模块映射到 IntelliJ IDEA 模块并通过指定的模块描述符提供附加功能:

  • 它明确提供给其他模块的包(所有 模块中的其他包对其他人隐式不可用 模块)
  • 它提供的服务
  • 它使用的服务
  • 它允许反射到哪些其他模块

IntelliJ IDEA already has a concept of modules for a project. Every IntelliJ IDEA module builds its own classpath. With the introduction of the new Java platform module system, IntelliJ IDEA modules had to extend their capability by supporting the Java platform's module-path if it is used instead of the classpath.

相关链接:

虽然我很喜欢 Intellij,但我必须回答是:有一个很大的不同。

Java 9 模块是封装和解耦中非常需要的一步。但是,由于它们属于单个 Intellij(以及 VCS)项目,因此 Intellij 模块中存在一种(意外的?病态的?)耦合形式。 Java 9 模块可以(从封装的角度来看,可能应该)在单独的 VCS/IDE 项目中开发,从中它们只能公开有意义的 API。 super (parent) POM 是一种跨项目提供非病态耦合以减少冗余的机制。

基于明确定义的领域和限界上下文的模块应该可以免费重用:这是朝着我们多年来一直在谈论的组件化迈出的一大步。这些领域不是随机的——它们反映了对世界的新兴分析。如果这听起来像是我在提倡类似 anarchy and Balkanization faced by Node developers - 我不是:经过充分分析的域是关键。

要么 Intellij 模块 "benefiting corruptly" 来自那种非常理想的后台耦合,这是 Intellij 项目的奇妙好处之一,要么将它们维护在一个单个项目。在非 TBD 环境中工作,每个 JIRA 票据都有一个分支会增加这种耦合的成本(个人经验)。

这种耦合的另一个答案的理由是 "refactoring" 的可能性涉及对多个模块的更改。但这是一种 code/design 气味:要么正在对 public API 进行重大更改,这对所有客户来说都是一个问题,通常可以通过一些想象、弃用、 EOL-warnings (Strangler pattern),等等,或者模块表现出病态内聚,可能是由于对有界上下文的分析不完整。