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

Gui*_*ume 25 dependencies maven-2 dependency-management

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

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

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

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

lex*_*ore 22

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

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

  • 您不认为应该区分内部依赖关系和外部依赖关系吗?我有类似的问题:http://stackoverflow.com/questions/20800571/are-there-any-reasons-to-keep-explicit-dependency-declaration-for-my-own-transit 我仍然看不到原因为什么我应该费心声明我自己的模块之间的所有依赖关系。如果 API 发生变化并且项目无法编译,那么我会修复它,并且很可能会提高代码的可维护性:) (2认同)

i00*_*174 14

我会更喜欢避免传递依赖的声明,并明确包括它们在聚甲醛,如果有一个很好的理由.以下是我的论点:

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

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

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

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

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

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

  • 你有一只两个依赖,说CD,需要的传递依赖的不同版本B (或您需要的特定版本B在您的项目).在这种情况下,您必须选择一个版本B并明确定义传递依赖项T.(*)

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