Это интересное положение дел в Мейвене, которого я не ожидал. Может быть, кто-то может точно объяснить, почему это происходит.
У меня есть родительский POM foobar-parent
, который объявляет logback-classic
с областью test
в разделе <dependencyManagement>
.
У меня есть отдельный проект example
, который имеет свой собственный example-parent
, который наследуется от foobar-parent
и также является родительским для его подмодулей.
Один подмодуль example-foo
переопределяет зависимость logback-classic
и дает ей compile
scope:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>compile</scope>
</dependency>
Наконец, у меня есть другой подмодуль example-bar
, который использует example-foo
в качестве зависимости.
Странно, но для эффективного POM example-bar
он показывает, что logback-classic
имеет test
область действия !! Поскольку example-foo
объявляет logback-classic
областью действия compile
(что означает, что это требуется во время компиляции), а поскольку example-bar
имеет зависимость времени компиляции от example-foo
, я ожидал, что example-bar
введет logback-classic
как переходная зависимость.
Я понимаю, что область действия test
, указанная в разделе управления <dependencyManagement>
родительского POM, переопределит область действия переходной зависимости из области действия compile
!! Это правильная интерпретация, и именно так должен работать Maven?