项目A依赖于具有运行时范围的项目B. 项目B依赖于具有编译范围的项目C. 如果项目A中的代码调用项目C中的函数,我希望项目A的mvn编译失败,但事实并非如此。
预期的行为是什么?
我正在使用maven 3.0.4和maven-compiler-plugin 2.5.1以及maven-dependency-plugin 2.5。
答案 0 :(得分:3)
maven文档提供了a slightly confusing until you understand it表。
要确定您需要遵循以下条目路径的范围...
从最终的父项目开始,合并所有<dependencies>
列表。对<dependencyManagement>
执行相同操作。合并时,groupId:artifactId:type:classifier
是关键,具有相同键的依赖关系的子poms会覆盖它们指定的任何值。
现在您需要将<dependencyManagement>
应用于<dependencies>
列表以填写任何空白。
此时我们现在知道当前项目的依赖关系。此列表中的范围对应于您从表中选择的行。
对于列表中的每个依赖项,重复上述过程以计算依赖项有效依赖项列表(是的,包括该步骤),然后这些依赖项的范围与表中的列选择相对应。
一旦您通过表格计算了传递依赖关系及其范围,对于每个依赖关系,然后应用当前模块的<dependencyManagement>
覆盖scope
,version
和{{1由exclusions
定义,你有一个有效的传递依赖列表。
还有其他更微妙的效果可以保留现有的行为,其中bug本质上已成为特征,而版本范围可能会进一步混淆事物,但是上面会给出一个上帝对问题空间的一般理解