2013-04-03 3 views
2

Проект A зависит от проекта B с областью исполнения. Проект B зависит от проекта C с областью компиляции. Если код в проекте A вызывает функцию в проекте C, я ожидаю, что mvn-компиляция проекта A завершится неудачей, но это не так.maven runtime scope, но транзитивные зависимости имеют область компиляции

Каково ожидаемое поведение?

Я использую maven 3.0.4 с maven-compiler-plugin 2.5.1 и maven-dependency-plugin 2.5.

+0

Это оказалось потому что родительский pom имел раздел управления зависимостями, предоставляющий область для проекта C как компиляцию. Я все еще удивляюсь, что во время компиляции A ограничение в области C, подразумеваемое транзитивными зависимостями, не переопределяет область в управлении зависимостями родительских элементов. –

ответ

3

Документация maven дает a slightly confusing until you understand it стол.

Чтобы выяснить, что область является вы должны следовать по следующему пути записей ...

  1. Start от конечного родительского проекта и объединить все <dependencies> списка. Сделайте то же самое для <dependencyManagement>. При слиянии, groupId:artifactId:type:classifier является ключевым, детские помпы, которые имеют зависимости с одним и тем же ключом, переписывают все значения, которые они определяют.

  2. Теперь вам необходимо нанести <dependencyManagement> на список <dependencies>, чтобы заполнить все пробелы.

На данный момент мы теперь знаем зависимости текущего проекта. Области в этом списке соответствуют строке, выбранной вами из таблицы.

Для каждой зависимости в списке вы повторите описанный выше процесс, чтобы вычислить список зависимых зависимых зависимостей (да включая и шаг ths), а затем область этих зависимостей соответствует выбору столбца в таблице.

После того, как вы разработали транзитивную зависимость, и их области через таблицу, для каждой зависимости, затем вы ток модуль <dependencyManagement> наиважнейшей scope, version и exclusions, как определенно <dependencyManagement> и там у вас есть эффективный список переходных зависимостей ,

Есть другие, более тонкие эффекты, которые есть, чтобы сохранить существующее поведение, когда ошибки имеют по существу становятся функциями и диапазоны версий могут дополнительно запутать, но выше Шоуду дать бог общего понимание проблемы пространства