父 POM 依赖于它自己的模块

Parent POM Having a Dependency on its own Modules

所以我有一个包含三个模块的父 POM,定义如下:

<modules>
   <module>m1</module>
   <module>m2</module>
   <module>m3</module>
</modules>

父级还在其自己的模块上定义了两个依赖项:

<dependency>
   <artifiactId>m1</artifactId>
</dependency>

<dependency>
   <artifiactId>m2</artifactId>
</dependency>

当我尝试构建项目时,第一个模块的构建失败,因为它无法在存储库中找到自己。

我已经弄清楚了在构建 m1 时它试图解决对 m1 的父依赖性以构建 m1。很明显,如果你依靠自己,你不存在,你怎么能建立。

我的问题是父 POM 除了声明模块之外还应该依赖于它们吗?想知道这里的正确做法是什么?

注意:父项本身没有代码:

我觉得你把事情弄糊涂了。

你需要三样东西:

  • 聚合器
  • 父 POM
  • 模块

您的结构应如下所示:

your-project/
|- module1/
|  |- src/main/java/
|  |- src/main/resources/
|  |- src/test/java/
|  |- src/test/resources/
|  |- pom.xml
|- module2/
|  |- src/main/java/
|  |- src/main/resources/
|  |- src/test/java/
|  |- src/test/resources/
|  |- pom.xml
|- module3/
|  |- src/main/java/
|  |- src/main/resources/
|  |- src/test/java/
|  |- src/test/resources/
|  |- pom.xml
|- your-parent/                 [This is your parent]
|  |- pom.xml
|- pom.xml                      [This is your aggregator]

进一步说明:

  • your-project/pom.xml 中你应该只定义你的 <modules/> 部分并且没有任何其他可扩展的东西,如 <build/>,或 <dependencies/>,或 <dependencyManagement/> 部分.
  • 您应该在 your-project/your-parent/pom.xml 文件中包含上述部分。
  • 你的模块应该使用 your-project/your-parent/pom.xml 作为它们的父模块。

我不确定为什么您需要父级依赖聚合器中的模块。我认为您很可能不想这样做。在需要的地方明确定义这些依赖关系,而不是在扩展父级时默认这样做。

根据我多年作为构建和发布工程师的经验,我强烈建议您不要混用聚合器和父级。这些在逻辑上是独立的概念,尽管它们可能是同一件事,但实际上却不是。这样事情就会更加解耦并且更容易管理。当您更改父级中的内容时,您实际上只想更改父级,而不是整个聚合器。如果两者不是分开的,这会复杂得多,并且往往会让你的事情变慢,如果你明白我的意思的话。