27

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

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

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

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

4

2 回答 2

26

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

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

于 2010-11-19T16:25:40.670 回答
14

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

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

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

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

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

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

在以下情况下显式包含依赖项是有意义的:

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

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

于 2011-11-10T15:27:35.333 回答