maven运行时范围但传递依赖项具有编译范围

时间:2013-04-03 16:58:48

标签: maven maven-compiler-plugin

项目A依赖于具有运行时范围的项目B. 项目B依赖于具有编译范围的项目C. 如果项目A中的代码调用项目C中的函数,我希望项目A的mvn编译失败,但事实并非如此。

预期的行为是什么?

我正在使用maven 3.0.4和maven-compiler-plugin 2.5.1以及maven-dependency-plugin 2.5。

1 个答案:

答案 0 :(得分:3)

maven文档提供了a slightly confusing until you understand it表。

要确定您需要遵循以下条目路径的范围...

  1. 从最终的父项目开始,合并所有<dependencies>列表。对<dependencyManagement>执行相同操作。合并时,groupId:artifactId:type:classifier是关键,具有相同键的依赖关系的子poms会覆盖它们指定的任何值。

  2. 现在您需要将<dependencyManagement>应用于<dependencies>列表以填写任何空白。

  3. 此时我们现在知道当前项目的依赖关系。此列表中的范围对应于您从表中选择的行。

    对于列表中的每个依赖项,重复上述过程以计算依赖项有效依赖项列表(是的,包括该步骤),然后这些依赖项的范围与表中的列选择相对应。

    一旦您通过表格计算了传递依赖关系及其范围,对于每个依赖关系,然后应用当前模块的<dependencyManagement>覆盖scopeversion和{{1由exclusions定义,你有一个有效的传递依赖列表。

    还有其他更微妙的效果可以保留现有的行为,其中bug本质上已成为特征,而版本范围可能会进一步混淆事物,但是上面会给出一个上帝对问题空间的一般理解