Maven:我应该保留还是删除声明的依赖关系,它们也是传递依赖关系?

Posted

技术标签:

【中文标题】Maven:我应该保留还是删除声明的依赖关系,它们也是传递依赖关系?【英文标题】:Maven : Should I keep or remove declared dependencies that are also transitives dependencies? 【发布时间】:2011-05-12 17:21:03 【问题描述】:

您认为删除 maven pom 中可以找到的所有传递依赖项是一种好习惯吗?

示例: 我的项目依赖于 A 和 B。 B 也是 A 的传递依赖。 我应该将 B 保留在我的 pom 中还是删除它?

什么是最好的: 在 pom 上声明所有已知的罐子,甚至是传递的罐子,还是只保留***罐子?

这有点主观,但我正在尝试清理一些具有大量传递依赖项的大型 pom(父子节点)。我想让我的 pom 尽可能简单,但我也希望它们是可维护的。

【问题讨论】:

【参考方案1】:

如果您的项目对 B 有直接依赖关系,那么即使 B 是 A 的传递依赖项,您也应该保留它。可能在下一个版本中,A 不会使用 B,您将不得不重新构建 pom.xml。 xml。

通常,Maven 依赖项应该反映逻辑项目依赖项。

【讨论】:

感谢您的回答和链接。我喜欢这个建议:'反映逻辑项目依赖关系' 你不认为你应该在这里区分内部依赖和外部依赖吗?我有类似的问题:***.com/questions/20800571/… 我仍然看不出为什么我应该费心声明我自己的模块之间的所有依赖关系。如果 API 发生变化并且项目无法编译,那么我会修复它,并且很可能会在此过程中提高代码的可维护性 :) 链接与问题/答案的关系如何? @AlikElzin-kilaka 我已经将 MSTP 作为插件启动,用于分析项目依赖关系并给出建议作为直接依赖项包含哪些内容以及删除哪些内容。这正是这里要问的问题。但是,我从来没有进入生产版本,所以我将编辑掉link。【参考方案2】:

我会更喜欢避免传递依赖的声明,如果有充分的理由,我会明确地将它们包含在 pom 中。以下是我的论点:

我尝试让 pom 尽可能简单。声明了传递依赖项后,即使显式使用它们,Maven pom 也会变得更加冗长。

通过声明传递依赖(即使您明确需要它们):

在声明中引入了冗余,因为该信息已经在 所需工件的 pom 描述符中

如果 所需工件的新版本不再依赖于 transitive dependency,您必须自己从程序集中删除 transitive dependency,如果 transitive dependency 是明确声明。

通过显式声明传递依赖关系来操纵传递信息。

在以下情况下明确包含依赖项是有意义的

您有一个两个依赖项,比如CD,它们需要不同版本的传递依赖项B(或者您需要在项目中使用特定版本的B)。在这种情况下,您必须选择B 的版本并显式定义传递依赖关系T。 (*)

结论: 我会尽量避免声明,除非明确声明工件是有意义的(比如在案例 (*) 中)。

【讨论】:

如果你想参与类似的讨论:***.com/questions/20800571/…

以上是关于Maven:我应该保留还是删除声明的依赖关系,它们也是传递依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

Maven 中未使用/未声明的依赖项是啥?拿他们怎么办?

如果它们来自我父母的其他子模块,我应该依赖 Maven 中的传递依赖吗?

获取使用未声明的依赖关系[关闭]

Maven 在 IntelliJ 中找不到依赖项

扫描多个 maven pom 以获取不同的依赖版本

常春藤:我如何删除传递依赖?