如何在maven多模块构建中有效地声明提供的范围依赖性?

时间:2011-11-23 22:46:38

标签: maven

我有一个maven多模块pom,可以制造一场战争。我想在父pom中声明一个提供的范围依赖于jsp-api。 Maven文档表明声明为提供的依赖项不具有传递性,因此:

我是否需要遍历所有子模块poms并声明提供的依赖项?项目中有大约40个模块,并且不能立即清楚哪个需要依赖项,所以这个似乎很多努力不是很多,而且我很懒。您如何在项目中处理这种情况?

- 编辑 -

因此,对于其他人来说,这种情况正在发生,因为父pom正在定义dependencyManagment部分中的所有依赖项。我之前不会遇到这个问题,但它有助于减少复杂依赖关系的重复与排除或其他非平凡的属性。它还覆盖了继承机制。正如我所理解的那样,一个好的经验法则是只使用它来解决一个问题,不要像这个pom的作者那样把所有的依赖关系都放在那里。也许合适的专家可以证实这一点。

1 个答案:

答案 0 :(得分:2)

即使提供的范围依赖项不可传递,它们也可以继承。也就是说,如果模块A具有提供的范围依赖性,并且模块B依赖于A,则模块B将不会隐式地具有提供的范围依赖性。但是,我相信如果模块C将模块A作为父pom,它应该正常继承该依赖关系。

您可以通过在其中一个子poms上运行mvn help:effective-pom来自行验证此行为,有效-pom目标应该为您提供运行它的pom的完全解析视图,同时考虑继承,相当于maven在运行时会实际使用什么。如果<dependency>出现在那里(就像在我的实验中看到的那样),那么只应在父pom中指定依赖关系。