отказ
(Первоначально я задал вопрос очень подробно здесь. Я привел его здесь, поскольку список рассылки maven-users
затих на этом вопросе.) (Не просто еще один вопрос новичка)
Ссылка
Моим справочным материалом является http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management; пожалуйста, дайте мне знать в этой дискуссии, если это устарело или неправильно.
Вопрос
В этом документе есть раздел, который начинается со слов "Второй и очень важный...". В дальнейшем я сошлюсь на этот раздел проектов A
и B
и извлечу из них.
В этом разделе вы увидите, что у проекта A
есть раздел <dependencyManagement>
котором, среди прочего, определен артефакт c
, имеющий compile
области действия:
<!-- In A pom.xml; condensed for brevity -->
<dependencyManagement>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<scope>compile</scope> <!-- look: compile scope -->
</dependency>
</dependencyManagement>
Затем вы увидите pom.xml
для проекта B
который (a) наследует от проекта A
(таким образом, наследует его раздел dependencyManagement
) и (b) устанавливает зависимость от артефакта c
, без необходимости указывать его version
. Вы также заметите, что зависимость от артефакта c
переопределяет область действия c
для runtime
, а не для compile
:
<!-- In B pom.xml, whose parent is A pom.xml (above); condensed for brevity -->
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<scope>runtime</scope> <!-- look: runtime scope -->
</dependency>
</dependencies>
Опять же, вы заметите, что нет элемента <version>
, но есть элемент <scope>runtime</scope>
.
Моя интерпретация этого заключается в том, что когда все сказано и сделано, B
будет зависеть от версии 1.0
артефакта c
в области runtime
, а не от области compile
.
Это верно? Моя ошибка в maven-ear-plugin
основана на том факте, что это ожидаемое поведение. Это не то, что происходит, когда maven-ear-plugin
создает файл .ear
.
Далее, если это правильно, я бы также ожидал, что если бы артефакт c
имел какие-либо транзитивные зависимости runtime
они были бы доступны в B
classpath runtime
(как определено несколько сбивающей с толку таблицей в http://maven.apache.org/guides/introduction/Введение-в-зависимость-механизм .html # Dependency_Scope).
Это верно?