gpt4 book ai didi

java - 马文 : How do you deal with dependencies that are both direct and transitive?

转载 作者:搜寻专家 更新时间:2023-10-31 19:50:00 27 4
gpt4 key购买 nike

我正在尝试确定解决以下情况的方法:

有 3 个 Maven 工件:A、B 和 C。

B 依赖于 A。(即它使用了 A 的一些代码)

C 依赖于 A 和 B(即它使用了 A 的一些代码和 B 的代码)。

假设我想为 B 和 C 使用相同版本的 A。

应该使用什么方法?

1) 在 C 的 pom.xml 中声明 A 为依赖。

优点:开发人员很清楚 C 依赖于 A。Con:如果A的版本发生变化,需要多处更新。 (B 和 C)

2) 不要在 C 的 pom.xml 中将 A 声明为依赖项。

赞成/反对:与选项 1 相反。

最佳答案

我认为您应该在 pom.xml 中声明所有直接依赖项。传递依赖关系只是一种方便的方式,可以自动解决您的依赖关系依赖关系。

如果您更改直接依赖项的版本,传递依赖项可能会随之更改,从而可能破坏模块。该模块应该构建为一个独立的单元,因此应该具有明确定义的依赖关系,不会因外部更改而中断。

我不同意这违反了 DRY 原则,因为 maven 在单个项目及其 pom.xml 的范围内定义事物。并且在这个范围内没有重复。

更新:对现有传递依赖项的依赖使项目本身变得脆弱,并且还可能导致更复杂的问题,例如何时包含它。

例如,如果 C 对 A 具有编译依赖性,但对 B 具有运行时依赖性,那么您现在必须添加依赖性(因为它不再在您的构建路径中)或将 B 声明为编译,即使它不是。为了清楚起见,有很多话要说。明确定义您的依赖项是什么以及它们的范围是什么,并期望您的依赖项也这样做。在大多数情况下,您的依赖项是一个黑盒子,直到它导致问题并且您必须打开它。

关于java - 马文 : How do you deal with dependencies that are both direct and transitive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com