在依赖范围" test"下的本文档(https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html)中,它表示测试范围不具有传递性。这是什么意思?
据我所知,第一个不正确,第二个是正确的。有人可以告诉我它到底是什么意思吗?
答案 0 :(得分:5)
要清楚,this is the passage of the documentation:
<强>测试强>
此范围表示正常使用应用程序不需要依赖关系,并且仅可用于测试编译和执行阶段。这个范围不具有传递性。
这两个句子处理在依赖解析期间可能出现的情况:在POM中声明依赖关系,并考虑在POM中声明的依赖关系的传递依赖性。
第一部分意味着在POM中使用范围test
的依赖项将导致该依赖项仅在测试类路径中可用。换句话说,当您在POM中明确声明了依赖项时,它适用:
<dependency>
<!-- GAV coordinates -->
<scope>test</scope>
</dependency>
尝试在主Java类(src/main/java
下)中使用它将导致编译错误,并且在测试Java类(在src/test/java
下)中使用它将正常工作。
第二部分适用于在POM中声明的依赖项的依赖项。这意味着将省略在POM中声明的依赖项的测试范围依赖项。例如,假设您对名为A的库具有编译时依赖性,并且A本身对B具有测试范围依赖性;然后B将在依赖项解析中被忽略,并且不会在您的类路径上结束。逻辑是,A需要B来运行其测试,但作为A的消费者,您不需要B能够使用它。这些测试范围的依赖项将始终被省略,无论您声明的依赖项的范围是什么(无论是compile
,runtime
,还是test
),这就是{{{ 1}}范围被称为不可传递。
换句话说,这完全取决于&#34;某些pom&#34;的含义。当您在POM中声明测试范围依赖项时,它将在测试类路径中可用。它的所有编译和运行时传递依赖性也将在测试类路径中可用,因为test
和compile
范围是可传递的,并且将以runtime
的范围继承。当POM不是您自己的时,将始终省略测试范围依赖项(因此也将省略其依赖项)。