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

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

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

– 编辑 –

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

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

您可以通过在其中一个子pom上运行mvn help:effective-pom来验证此行为,有效-pom目标应该为您提供运行它的pom的完全解析视图,同时考虑继承,相当于maven它会在运行时实际使用.如果 显示在那里(在我的实验中似乎)你应该很好地只在父pom中指定依赖.

点赞