所以我有一个父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没有自己的代码:
答案 0 :(得分:1)
我觉得你有点困惑。
你需要三件事:
您的结构应如下所示:
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
作为其父级。我不确定为什么你需要父母依赖聚合器中的模块。我想你最有可能不想这样做。在需要时明确定义这些依赖项,而不是在扩展父项时默认执行它。
根据我多年作为构建和发布工程师的经验,我强烈建议您不要混合聚合器和父级。这些是逻辑上独立的概念,虽然它们可以是相同的,但它们实际上并非如此。这样事情就会更加分离,更容易管理。当您更改父项中的内容时,您实际上只想更改父项,而不是整个聚合器。如果两者不是分开的话,那就更复杂了,如果你理解我的意思,往往会让事情变得更慢。