您是否应该在pom中包括已经是某些依赖项的依赖项的那些依赖项?

时间:2018-11-08 00:44:41

标签: maven pom.xml maven-dependency

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

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

但是,当您的模块以及A和B都是同一项目中的模块时,情况又如何呢?也就是说,知道它们的版本将会同步。

1 个答案:

答案 0 :(得分:6)

如果您的模块使用B中的API,则最佳做法是将其显式添加到pom中,即使并非绝对必要。如果您升级A,很可能是因为它不再使用B,那么您将在没有对模块代码进行任何更改的情况下发生构建失败。

关于版本,您应该在父pom中使用dependencyManagement来管理版本。然后,您可以在子poms中跳过托管依赖项的版本。 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目标。