【问题标题】:Maven: How to deal with modules that contain modules?Maven:如何处理包含模块的模块?
【发布时间】:2019-12-06 19:47:19
【问题描述】:

之前我曾处理过由两个层次结构组成的多模块 Maven 项目。父 POM 后跟它们自己的目录和 POM 中的模块。

但现在我已经接管了一个包含父级的项目,然后是再次包含模块的模块。

这一切都符合 Maven 指南,还是我在处理定制的东西?

我该如何解释这些子模块?知道你可以指点我的指南吗?

我可以成功运行所有 Maven 生命周期。虽然我不确定是否以及如何重构应用程序并开始插入我自己的代码。

这是我的项目结构树,只剩下几个模块:

top-parent
|   pom.xml (modules: applications, checks, core, test)
|           
+---applications 
|   |   pom.xml (parent: top-parent) (modules: batch, surefire, web)    
|       <parent>
|         <artifactId>applications</artifactId>
|         <groupId>com.a.b.codechecker</groupId>
|         <version>1.0</version>
|       </parent>
|       <artifactId>batch</artifactId>  
|  
|   |                       
|   \---web
|       |   pom.xml
|           <parent>
|             <groupId>com.a.b.codechecker</groupId>
|             <artifactId>applications</artifactId>             
|             <version>1.0</version>
|           </parent>
|           <artifactId>web</artifactId>
|                               
+---checks
|   |   pom.xml (parent: top parent) (modules: aggregator, blacklist-check)
|       <parent>
|         <groupId>com.a.b.codechecker</groupId>
|         <artifactId>parent</artifactId>
|         <version>1.0</version>
|       </parent>
|       <groupId>com.a.b.codechecker.checks</groupId>
|       <artifactId>checks</artifactId>
|   |
|   +---aggregator
|       |   pom.xml
            <parent>
              <artifactId>checks</artifactId>
              <groupId>com.a.b.codechecker.checks</groupId>
              <version>1.0</version>
            </parent>
            <artifactId>aggregator</artifactId>                                 

【问题讨论】:

  • 结构看起来很好,孩子的孩子有正确的父母,比如黑名单检查有父母检查..正确..实际上没有级别数限制......但是我。会质疑test之类的模块名称吗?
  • 该模块“提供帮助类来简化自动化测试和测试数据生成”(来自自述文件)。但很高兴听到有几个级别通常没问题。聚合器中的&lt;groupId&gt;com.a.b.codechecker.checks&lt;/groupId&gt;applications 中没有显式的groupId 之间有区别吗?
  • 您能否澄清“我如何解释这些子模块”这一行,以便我们为您提供帮助。

标签: java xml maven pom.xml parent-pom


【解决方案1】:

我提供以下几个大纲。

根据问题, 这一切都是根据 Maven 指南进行的,还是我在处理定制的东西?

是的,你可以有 Parent、Child、Grand 子类型的模块结构。Parent 和 Child 类型的 maven 多模块层次结构很简单,但在某些情况下,开发人员设计为在一个模块内有多个子模块。如果你有一个大型项目,有 n 个模块和 m 个子模块,对于不同级别的开发人员来说会变得很复杂。

根据这个问题, 我该如何解释这些子模块?知道可以给我指点的指南吗? 如何进行简单管理取决于开发团队。我建议,如果你有很多子模块,你可以创建/维护另一个独立的项目,你可以在需要的地方将依赖项添加到主项目中。它将在不考虑主要项目的情况下为您提供该项目的粒度和单独的团队工作。

对于大型项目,始终建议维护独立项目,您可以在其他项目中添加依赖项。为此,您可以使用 Nexus 或 Artifactory 进行工件管理。

【讨论】:

  • 这很好地回答了我的问题。我是一名实习生/学生,对这种结构感到恼火。此外,有效的 POM 看起来很奇怪,因为许多依赖关系翻了一番,但 groupId 不同,这可能是由于 project.parent.groupid 和 'project.groupid' 的使用不一致。由于这是一个非常小的项目(我猜你的规模),我决定扁平化结构并重构 POM。无论如何,在这个项目上工作的人永远不会超过一个。
  • 是的@JellyFilledNuts
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 2013-10-28
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多