假设您需要两个依赖项:A和B。同时A已经是B的依赖项。那么您是否仍希望/需要将A和B一起添加为pom的依赖项?
我相信当A和B是外部库时,这可能是必需的,其中所需的A版本可能与B所依赖的A版本不同。
但是,当您的模块以及A和B都是同一项目中的模块时,情况又如何呢?也就是说,知道它们的版本将会同步。
答案 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目标。