这是我没想到的Maven有趣的状况。也许有人可以确切解释为什么会这样。
我有一个父POM foobar-parent
,它在logback-classic
部分中声明了一个test
范围的<dependencyManagement>
。
我有一个单独的项目项目example
,它有自己的example-parent
,该项目继承自foobar-parent
,并且也是其子模块的父项。
一个子模块example-foo
覆盖依赖项logback-classic
并赋予其compile
范围:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>compile</scope>
</dependency>
最后,我还有另一个子模块example-bar
,它使用example-foo
作为依赖项。
奇怪的是,对于example-bar
的有效POM,它表明logback-classic
具有test
的范围!由于example-foo
声明logback-classic
属于compile
范围(这意味着在编译时是必需的),并且由于example-bar
具有对example-foo
的编译时依赖性,我希望example-bar
引入logback-classic
作为传递依赖。
我的解释方式是,父POM的test
管理部分中指定的<dependencyManagement>
范围将覆盖compile
范围的传递依赖项的范围!这是正确的解释吗?Maven应该如何工作?