Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
maven运行时作用域,但可传递依赖项具有编译作用域_Maven_Maven Compiler Plugin - Fatal编程技术网

maven运行时作用域,但可传递依赖项具有编译作用域

maven运行时作用域,但可传递依赖项具有编译作用域,maven,maven-compiler-plugin,Maven,Maven Compiler Plugin,项目A依赖于具有运行时范围的项目B。 项目B依赖于具有编译范围的项目C。 若项目A中的代码调用项目C中的函数,我希望项目A的mvn编译失败,但事实并非如此 预期的行为是什么 我将maven 3.0.4与maven编译器插件2.5.1和maven依赖插件2.5一起使用。maven文档给出了表 要确定范围是什么,您需要遵循以下条目路径 从最终父项目开始,合并所有列表。对执行相同的操作。合并时,groupId:artifactId:type:classifier是键,具有相同键的依赖项的子POM将覆盖

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

预期的行为是什么


我将maven 3.0.4与maven编译器插件2.5.1和maven依赖插件2.5一起使用。

maven文档给出了表

要确定范围是什么,您需要遵循以下条目路径

  • 从最终父项目开始,合并所有
    列表。对
    执行相同的操作。合并时,
    groupId:artifactId:type:classifier
    是键,具有相同键的依赖项的子POM将覆盖它们指定的任何值

  • 现在,您需要将
    应用到
    列表以填充任何空白

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

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

    一旦您通过表格计算出可传递依赖项及其范围,对于每个依赖项,您就可以应用当前模块的
    覆盖
    范围
    版本
    排除项
    ,这就是有效的可传递依赖项列表


    还有其他更微妙的影响,可以保留现有的行为,其中bug基本上已经成为特性,版本范围可能会进一步混淆问题,但是上面应该对问题空间有一个大致的理解

    这是因为父pom有一个依赖项管理部分,给出了项目C作为编译的范围。我仍然感到惊讶的是,在编译过程中,可传递依赖项所隐含的对C范围的限制并没有覆盖父依赖项管理中的范围。