我希望(必须)使用彼此相邻的两个maven依赖项“Y”和“G”,而它们与不同版本共享相同的依赖项。 默认情况下,旧版本将被较新版本覆盖。然而,这会破坏性能。 如何隔离这两个依赖项并确保它们使用正确的依赖项?
答案 0 :(得分:1)
默认情况下,旧版本将被较新版本覆盖。
事实并非如此。默认情况下,Maven在解析相同依赖项的冲突版本时使用最近定义策略。它不一定采用新版本。这意味着依赖关系树中更高级别的POM声明的版本将覆盖在较低级别POM中声明的版本。如果两个版本在同一级别上,如图中的情况那样,将首先声明一个版本。
强制特定版本依赖项的最佳方法是在dependency
部分的父POM中明确定义dependencyManagement
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>groupId-z</groupId>
<artifactId>dependency-z</artifactId>
<version>1.0</version>
</dependency>
...
然后,所有子项目及其依赖项将自动使用指定的版本。
有关Maven中依赖项冲突解决方案的更多详细信息,请参阅this page。
答案 1 :(得分:0)
假设“X”是一个依赖于Y和G的模块,那么答案取决于它是如何运行的。例如:如果X是包含Y和G的WAR,那么您将无法拥有相同依赖关系的两个不同版本,或者您将遇到类加载问题。
因此,您是否可以在他们自己的POM中明确声明Y和G的正确版本,以便在它们被单独使用时将其覆盖为必要的共享版本?