Разрешение зависимости Maven и переопределение области - PullRequest
32 голосов
/ 28 сентября 2011

Отказ от ответственности

(Первоначально я задал вопрос очень подробно здесь . Я привел его здесь, поскольку список рассылки maven-users затих на этом вопросе.) (не просто еще один вопрос новичка)

Ссылка

Мой справочный материал http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management;, пожалуйста, дайте мне знать в этом обсуждении, если это устарело или неправильно.

Вопрос

В этом документе есть раздел, который начинается с "Второй, и очень важный ...".Далее я буду ссылаться на проекты этого раздела A и B и извлеку из них.

В этом разделе вы увидите, что в проекте A есть раздел <dependencyManagement>, который- среди прочего - определяет артефакт c как имеющий область действия compile:

<!-- In A's 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's pom.xml, whose parent is A's pom.xml (above); condensed for brevity -->
<dependencies>
    <dependency>
        <groupId>test</groupId>
        <artifactId>c</artifactId>
        <scope>runtime</scope> <!-- look: runtime scope -->
    </dependency>
</dependencies>

Опять же, вы заметите, что нет *Элемент 1040 *, но есть элемент <scope>runtime</scope>.

Моя интерпретация этого заключается в том, что когда все будет сказано и сделано, B будет зависеть от версии 1.0 артефакта cв runtime области, а не compile области.

Это правильно? Моя maven-ear-plugin ошибка основывается на том, что это ожидаемое поведение.Это не то, что происходит, когда maven-ear-plugin создает файл .ear.

Далее, если это правильно, я бы также ожидал, что если бы у артефакта c были транзитивные зависимости runtime, они были бы доступны.* * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * *. * * * * * * * * * * *. * * * * * * runtime.

1 Ответ

24 голосов
/ 29 сентября 2011

Запуск mvn dependency:tree в примере проекта, размещенного в указанной выше ссылке ошибка ,

[INFO] Building MEAR-143 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143 ---
[INFO] ljnelson:mear-143:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 Leaf 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-leaf ---
[INFO] ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 Middle 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-middle ---
[INFO] ljnelson:mear-143-middle:jar:1.0-SNAPSHOT
[INFO] +- ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT:runtime
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 EAR 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-ear ---
[INFO] ljnelson:mear-143-ear:ear:1.0-SNAPSHOT
[INFO] +- ljnelson:mear-143-middle:jar:1.0-SNAPSHOT:runtime
[INFO] |  \- ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT:test (scope managed from ru
ntime)
[INFO] \- junit:junit:jar:4.8.2:test

Зависимость scope от mear-143-leaf в mear-143-middle, где явно определена зависимость, действительно runtime, переопределяя область действия test, определенную в разделе dependencyManagement родительского pom, mear-143.

В mear-143-ear, mear-143-leaf включается транзитивно . Здесь область действия test, определенная в dependencyManagement из mear-143, имеет приоритет над унаследованной областью runtime.

Это, я полагаю, соответствует тому, что указано во втором пункте в разделе, который вы упомянули выше. Цитируя это здесь и выделив жирным шрифтом и курсивом соответствующие части:

b определяется в разделе управления зависимостями родителя B и с управление зависимостями имеет приоритет перед передачей зависимостей для переходные зависимости , будет выбрана версия 1.0, если она будет упоминается в а или с пом. b также будет иметь область компиляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...