Maven 依赖版本冲突解决:添加排除还是添加依赖,哪种更好?

3
我们的依赖树里有一个问题,同一份jar包以不同版本来自不同的来源。而我们希望使用的版本在依赖树中居于较低位置,所以maven会采用最近者胜原则选取其他版本。
为了解决这个问题,我们可以从源依赖中排除错误版本,或者直接将该版本作为另一个依赖项添加到我们的pom文件中。
我更倾向于后者因为它更快速。但我不确定这是否是最佳做法,或者添加依赖是否存在任何缺点。那么,添加一个排除好处大于我所做的吗?在什么情况下以及如何排除呢?

添加排除更好,因为Maven中的依赖关系是分层的,所以如果顺序发生变化,那么您的解决方案可能仍然会出现错误。 - Naruto
谢谢Naruto,但是我还是不太明白。如果我在pom中定义了一个依赖项,那么它应该是一级的,其他所有依赖项都会自动被忽略,对吧?那么这里的顺序又是怎么起作用的呢? - Sandeep Kaul
1个回答

4
我建议明确定义您的依赖关系,以便明确指定您通过传递依赖关系期望的版本。
虽然通常只声明代码直接引用的依赖项(即在Java中使用import语句来包含这些依赖项中的类),但也建议通过显式声明控制您的依赖项解析。显式声明将优先于Maven依赖项处理。
排除使构建更难以维护,并且如果需要通过其他依赖项转换地使用相同的依赖项并且每次使用不同的版本(而非您想要的版本),则可能需要多次复制相同的排除列表。此外,排除可能具有不希望的效果,因为它可能在预计之外占据优先位置。
将其声明为依赖项的一部分可以使其变得清晰、集中和易于更新/维护。 更新:甚至更好的方法是使用dependenciesManagement部分,正如官方文档here中所述,它还优先于Maven依赖项处理。

依赖管理对于传递依赖项优先于依赖项调解


1
添加一个排除可能会产生不希望的影响,因为它可能在意料之外占优势。明确依赖关系是正确的方法。 - rec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接