父 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 除了声明模块之外还应该依赖于它们吗?想知道这里的正确做法是什么?
注意:父项本身没有代码:
- 父项目
- m1
- java
- 资源
- m1Pom
- 平方米
- java
- 资源
- m1Pom
- 立方米
- java
- 资源
- m1Pom
- parentPom
我觉得你把事情弄糊涂了。
你需要三样东西:
- 聚合器
- 父 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
作为它们的父模块。
我不确定为什么您需要父级依赖聚合器中的模块。我认为您很可能不想这样做。在需要的地方明确定义这些依赖关系,而不是在扩展父级时默认这样做。
根据我多年作为构建和发布工程师的经验,我强烈建议您不要混用聚合器和父级。这些在逻辑上是独立的概念,尽管它们可能是同一件事,但实际上却不是。这样事情就会更加解耦并且更容易管理。当您更改父级中的内容时,您实际上只想更改父级,而不是整个聚合器。如果两者不是分开的,这会复杂得多,并且往往会让你的事情变慢,如果你明白我的意思的话。
所以我有一个包含三个模块的父 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 除了声明模块之外还应该依赖于它们吗?想知道这里的正确做法是什么?
注意:父项本身没有代码:
- 父项目
- m1
- java
- 资源
- m1Pom
- 平方米
- java
- 资源
- m1Pom
- 立方米
- java
- 资源
- m1Pom
- parentPom
- m1
我觉得你把事情弄糊涂了。
你需要三样东西:
- 聚合器
- 父 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
作为它们的父模块。
我不确定为什么您需要父级依赖聚合器中的模块。我认为您很可能不想这样做。在需要的地方明确定义这些依赖关系,而不是在扩展父级时默认这样做。
根据我多年作为构建和发布工程师的经验,我强烈建议您不要混用聚合器和父级。这些在逻辑上是独立的概念,尽管它们可能是同一件事,但实际上却不是。这样事情就会更加解耦并且更容易管理。当您更改父级中的内容时,您实际上只想更改父级,而不是整个聚合器。如果两者不是分开的,这会复杂得多,并且往往会让你的事情变慢,如果你明白我的意思的话。