Maven 继承和聚合示例架构

2024-03-24

我有一个问题,关于如何使用继承和聚合的组合最好地重新构建多个单独的 Maven 项目。

设置场景:

  • 有 3 个基于代码的现有 Maven 项目,全部由同一团队开发。
  • 1. 项目是一个API,我们调用的是project-api。
  • 另外 2 个项目是使用 project-api 的 Web 应用程序。我们将它们称为 web-app1 和 web-app2。

所有三个项目都有一些共同的基本依赖项,例如 log4j 和 junit。除此之外,web-app1 和 web-app2 依赖于project-api,并且它们之间还共享许多额外的公共依赖项。

我一直在阅读https://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html https://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html,我只是想确认我了解最佳实践。

遗产:

创建一个组织级别的父 POM,其中包含所有三个项目共有的依赖项(依赖项管理)以及一些环境设置和总体项目信息,对我来说是否有意义。意图是所有 Maven 项目(不一定是直接)都继承自此 POM。

对我来说,创建另一个父 POM 是否有意义,其中包含 web-app1 和 web-app2 共有的依赖项(依赖项管理),并且只有 web-app1 和 web-app2 从此 POM 继承。我认为这个 POM(我们称之为 Web 应用程序父 POM)应该是组织级别父 POM 的子 POM。

聚合:

就聚合而言,我不想在一天结束时创建单个工件。相反,我想运行一个 Maven 构建命令(可能在组织 POM 级别)来按以下顺序构建三个项目:

  1. 项目-api
  2. web-app1
  3. web-app2

这是否意味着组织父 POM 将声明模块:

  1. 项目-api
  2. Web 应用程序父 POM

Web 应用程序父 POM 将声明模块:

  1. web-app1
  2. web-app2

请注意,Web 应用程序父 POM 和组织父 POM 没有任何相关代码。我相信这是可以的,注意“事实上,在 Maven 世界中,项目根本不需要包含任何代码,只需包含 pom.xml”。取自http://maven.apache.org/pom.html http://maven.apache.org/pom.html.

最后,如何确保遵守我需要的构建顺序?例如。构建组织父 POM 会导致构建 project-api 并在构建 web-app1 和 web-app2 时使用此最新构建?

我希望这不会太令人困惑,很乐意澄清是否需要更多信息。如果我完全错了,请随时告诉我!谢谢。


你的做法是明智的。有几点:

组织级 POM

对环境设置和总体项目信息为“是”,对依赖项为“否”。

项目应该明确列出它们的所有依赖项,而不是依赖于继承它们(恕我直言)。这意味着您必须多次声明您的记录器,但这会减轻您以后的痛苦。 (当然,您可以使用单独的 POM 项目将相关的依赖项组合在一起,因此通常一起指定,就像链接中的 hibernate 示例一样)。如果你想集中versions的依赖关系,你可以把dependencyManagement父POM中的节,这意味着您仍然在子项目中声明依赖项,但版本来自父项目,从而确保一致性。没有声明依赖性的孩子根本不会得到它。

如果他们有重复的插件、配置等,那么拥有一个 webapp-parent 是个好主意。如果他们共享code,您可以添加另一个项目 webapp-common ,它是作为其他两个可以依赖的 jar 构建的。它的依赖项将被传递包含,因此这是常见依赖项的自然位置。

聚合

webapp-parent 不需要既是父级又是聚合器,除非您需要频繁构建 webapp1 和 webapp2 但不同时构建 project-api。您可以将所有项目作为整个父级的模块。你的目录结构可能看起来像

overall
  project-api
  webapp-parent
  webapp1
  webapp2

或者如果您更喜欢原来的建议,也可以

overall
  project-api
  webapp-parent
    webapp1
    webapp2

更重要的是随着时间的推移密切关注项目布局,并在适当的时候进行重构。

建造顺序

只要您声明依赖关系,Maven 就足够聪明,可以按照正确的顺序构建模块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven 继承和聚合示例架构 的相关文章

随机推荐