Maven:我应该保留还是删除也是传递依赖项的声明的依赖项?

时间:2010-11-19 15:59:47

标签: maven-2 dependencies dependency-management

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

例:
我的项目取决于A和B. B也是A.的传递依赖 我应该将B放在我的pom中还是将其取出?

什么是最好的:
拥有所有已知的罐子,甚至是传递的罐子,在pom上宣称或只保留顶级罐子?

这有点主观,但我试图用一些传递依赖来清理一些巨大的poms(父母和孩子)。我想让我的pom尽可能简单,但我也希望它们可以维护。

2 个答案:

答案 0 :(得分:22)

如果你的项目直接依赖于B,那么你应该保留它,即使B是A的传递依赖关系。可能是在下一个版本A中不会使用B,你必须重新构造pom。 XML。

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

答案 1 :(得分:12)

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

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

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

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

  • 如果新版本的工件不再依赖于transitive dependency,则必须自行从程序集中删除transitive dependency,如果是transitive dependency已明确声明。

  • 通过明确声明传递依赖性来操纵传递性信息。

在以下情况中明确包含依赖关系

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

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