对于多个项目,Maven 依赖项和依赖项管理有何区别?

7
很抱歉再次询问,请告诉我是否正确?我们有一个父 POM 和多个模块。如果所有子项目都想继承相同的 jar 文件(例如 spring),我可以将它们放在父项目 POM 的 中,而不需要在子 POM 中包含它们。
如果我在父 POM 的 下添加依赖项,则它们不会被包含在所有子项目中,但是我可以在 中添加我需要的那些(例如测试),而无需指定版本。
我的理解正确吗,还是完全错了?希望我的问题表述清晰了。
我只需要一个包含所有依赖项的巨大父 POM。子模块应该自动获得某些常见依赖项和每个子模块需要的特定依赖项。
谢谢,
哈里什

1个回答

17
在 dependencyManagement 中,您声明依赖版本、排除和其他可以让您在多个项目中管理它们(例如父pom)的内容。
然后,在 dependencies 中,您声明对依赖项的实际使用/需要,如果依赖项在父pom中进行了管理,则可以不使用版本进行管理,并且该版本将被继承,因此在父pom下游的用法中保持一致。
同样的逻辑也适用于 pluginManagement 和插件,包括插件配置。

非常感谢您的回复。因此,我将在父POM中创建<dependencyManagement>,包括版本和排除项。然后,我需要在父POM中添加<dependencies>,以便所有子项目都可以继承它们,并在子项目中为那些独自需要的依赖项创建<dependencies>。在<dependencyManagement>下创建的依赖项不会被任何项目继承。这样正确吗? - Harry
仍然不是很清楚:在父POM文件的<dependencyManagement>下,我列出了所有具有排除、版本等信息的依赖项。然后,在父级别的<dependencies>下,我列出了一些将用于所有项目的依赖项(例如记录日志)。那么<dependencyManagement>下的其他依赖项将不包括在子模块中,对吗? - Harry
不要在父级中添加依赖项。只在实际依赖项处添加它们。依赖管理将始终被继承。如果您确实需要管理一堆依赖项,可以使用import作用域,但这比必要的更复杂。 - Manfred Moser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接