首页 > 解决方案 > 你应该在你的 pom 中包含那些已经是你的一些依赖项的依赖项的依赖项吗?

问题描述

假设您需要两个依赖项:A 和 B。同时 A 已经是 B 的依赖项。那么您是否仍然希望/需要在 pom 中添加 A 和 B 作为依赖项?

我相信当 A 和 B 是外部库时,可能需要这可能需要 A 的版本可能与 B 所依赖的 A 的版本不同。

但是当你的模块和 A 和 B 都是同一个项目中的模块时呢?即知道他们的版本都将是同步的。

标签: mavenpom.xmlmaven-dependency

解决方案


如果您的模块使用来自 B 的 API,最好将其显式添加到您的 pom 中,即使这不是绝对必要的。如果您升级 A,很可能它不再使用 B,然后您将在不更改模块代码的情况下构建失败。

关于版本,您应该在父 pom 中使用dependencyManagement管理那些版本。然后,您可以跳过子 pom 中托管依赖项的版本。中的版本dependencyManagement覆盖传递依赖项中的版本,确保您在任何地方都使用相同的版本。

如果所有模块都在同一个项目中,它们也应该共享相同的项目版本。通常,这将是快照版本,例如1-SNAPSHOT

每个模块将使用类似的东西:

<project>
  <artifactId>A</artifactId>
  <version>1-SNAPSHOT</version>

并在其他模块中像这样引用 A 和 B:

<dependency>
  <groupId>com.yourcompany</groupId>
  <artifactId>A</artifactId>
  <version>${project.version}</version>
</dependency>

要在构建版本之前设置非 SNAPSHOT 版本,例如可以使用 maven-dependency-plugin 的versions:set目标。


推荐阅读