【发布时间】:2019-04-11 12:09:16
【问题描述】:
假设您需要两个依赖项:A 和 B。同时 A 已经是 B 的依赖项。那么您是否仍然希望/需要在 pom 中添加 A 和 B 作为依赖项?
我相信当 A 和 B 是外部库时,可能需要这样做,其中 A 所需的版本可能与 B 所依赖的 A 版本不同。
但是当你的模块和 A 和 B 都是同一个项目中的模块时呢?即知道他们的版本都将同步。
【问题讨论】:
标签: maven pom.xml maven-dependency
假设您需要两个依赖项:A 和 B。同时 A 已经是 B 的依赖项。那么您是否仍然希望/需要在 pom 中添加 A 和 B 作为依赖项?
我相信当 A 和 B 是外部库时,可能需要这样做,其中 A 所需的版本可能与 B 所依赖的 A 版本不同。
但是当你的模块和 A 和 B 都是同一个项目中的模块时呢?即知道他们的版本都将同步。
【问题讨论】:
标签: maven pom.xml maven-dependency
如果您的模块使用来自 B 的 API,最好将其显式添加到您的 pom 中,即使这不是绝对必要的。如果您升级 A,很可能它不再使用 B,然后您将在不更改模块代码的情况下构建失败。
关于版本,您应该在父 pom.xml 中管理带有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 目标。
【讨论】: