父POM对其自己的模块具有依赖性

时间:2017-10-06 15:58:48

标签: maven build dependencies pom.xml parent-pom

所以我有一个父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除了声明模块之外还应该依赖它们吗?想知道这里的正确做法是什么?

注意:Parent没有自己的代码:

  • parentProj
    • M1
      • 的java
      • 资源
      • m1Pom
    • 平方米
      • 的java
      • 资源
      • m1Pom
    • 立方米
      • 的java
      • 资源
      • m1Pom
    • parentPom

1 个答案:

答案 0 :(得分:1)

我觉得你有点困惑。

你需要三件事:

  • 聚合器
  • 父母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/>部分。< / LI>
  • 您应该在your-project/your-parent/pom.xml文件中包含上述部分。
  • 您的模块应使用your-project/your-parent/pom.xml作为其父级。

我不确定为什么你需要父母依赖聚合器中的模块。我想你最有可能不想这样做。在需要时明确定义这些依赖项,而不是在扩展父项时默认执行它。

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