确保 Maven 中的依赖版本一致
Ensuring consistent dependencies version in Maven
在我的项目中,我有模块 M1
,它使用库 A
。此库依赖于库 B
.
并且在另一个模块中 M2
我想使用库 B
。
当然,我有 "root" 模块,它依赖于我所有的模块,所以库 B
的版本在所有项目中应该是相同的。
所以我将 B
添加到我的 M2
模块的依赖项中,但不知道如何指定它的版本,因为我需要与库 A
使用的完全相同的版本。
如果我指定库 B
的当前版本,那么当我将库 A
升级到新版本时,我将忘记更新模块中 B
的版本。
我也不想将 A
作为 M2
的依赖项,因为我只需要它的有限部分功能。
我的案例的最佳做法是什么?
如果版本不同,maven enforce 插件可以中断构建,因此您不要忘记更新:参见 https://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html
有几个选项,其中一些您明确排除。为了完整起见,让我提一下它们:
将 B
作为依赖项包含在 M2
中。
- 优点:关于仅向
M2
添加实际需要的那些功能的最干净的解决方案。
- 缺点:
M2
中B
的版本必须与A
中B
的版本保持同步手动。
将 A
作为依赖项包含在 M2
中。
- 优点:Central
<DependencyManagement>
可以在你的父 POM 中使用。因此,B
的版本在所有子项目中将始终相同。
- 缺点:
M2
中不需要的 A
功能已添加到 M2
。
将 M1
作为依赖项包含在 M2
中。
- 优点:
M2
总是使用与 A
相同版本的 B
,而无需处理 B
作为完全依赖。
- 缺点:
M2
中不需要的 M1
和 A
的功能已添加到 M2
。
使用<dependency>/.../<exclusion>
从M1
中的A
中排除B
。
- 优点:Central
<DependencyManagement>
可以在你的父 POM 中使用。因此,B
的版本在所有子项目中将始终相同。
- 缺点:
B
的版本必须手动与 A
中的 B
的版本保持同步。
[如果还有什么我没有想到的,欢迎输入。]
尝试Maven Enforcer Plugin's Dependency Convergence mentioned by 。如果它适用于直接依赖和传递依赖的混合,就像你的情况一样,我会将它与 1.
结合使用
在我的项目中,我有模块 M1
,它使用库 A
。此库依赖于库 B
.
并且在另一个模块中 M2
我想使用库 B
。
当然,我有 "root" 模块,它依赖于我所有的模块,所以库 B
的版本在所有项目中应该是相同的。
所以我将 B
添加到我的 M2
模块的依赖项中,但不知道如何指定它的版本,因为我需要与库 A
使用的完全相同的版本。
如果我指定库 B
的当前版本,那么当我将库 A
升级到新版本时,我将忘记更新模块中 B
的版本。
我也不想将 A
作为 M2
的依赖项,因为我只需要它的有限部分功能。
我的案例的最佳做法是什么?
如果版本不同,maven enforce 插件可以中断构建,因此您不要忘记更新:参见 https://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html
有几个选项,其中一些您明确排除。为了完整起见,让我提一下它们:
将
B
作为依赖项包含在M2
中。- 优点:关于仅向
M2
添加实际需要的那些功能的最干净的解决方案。 - 缺点:
M2
中B
的版本必须与A
中B
的版本保持同步手动。
- 优点:关于仅向
将
A
作为依赖项包含在M2
中。- 优点:Central
<DependencyManagement>
可以在你的父 POM 中使用。因此,B
的版本在所有子项目中将始终相同。 - 缺点:
M2
中不需要的A
功能已添加到M2
。
- 优点:Central
将
M1
作为依赖项包含在M2
中。- 优点:
M2
总是使用与A
相同版本的B
,而无需处理B
作为完全依赖。 - 缺点:
M2
中不需要的M1
和A
的功能已添加到M2
。
- 优点:
使用
<dependency>/.../<exclusion>
从M1
中的A
中排除B
。- 优点:Central
<DependencyManagement>
可以在你的父 POM 中使用。因此,B
的版本在所有子项目中将始终相同。 - 缺点:
B
的版本必须手动与A
中的B
的版本保持同步。
- 优点:Central
[如果还有什么我没有想到的,欢迎输入。]
尝试Maven Enforcer Plugin's Dependency Convergence mentioned by