Так и должно быть, ведь Maven должен получить зависимости от libA, но этого не произошло.
Нет, в вашем случае Maven не узнает ни с того ни с сего, какие транзитивные зависимости потребуются libA, потому что libA была установлена вручную и нигде нет следов libB.
Обычно транзитивные зависимости — это зависимости, определенные в разделе dependencies
файла .pom
, доступного как часть развернутого приложения. Файл .pom
по сути является копией исходного файла pom.xml
, переименованного в соответствии с именем библиотеки (т. е. artifactId-version.jar
, затем artifactId-version.pom
).
При разрешении зависимости maven также проверяет свой файл .pom
и, таким образом, получает информацию о своих зависимостях (которые становятся транзитивными зависимостями) и строит (и извлекает) для него требуемый граф зависимостей (то есть повторяет один и тот же процесс для каждого и каждая объявленная зависимость).
Из официального Maven — Введение в механизм зависимостей
Эта функция облегчается чтением файлов проекта ваших зависимостей из указанных удаленных репозиториев. Как правило, в вашем проекте используются все зависимости этих проектов, а также все, что проект наследует от своих родителей или от своих зависимостей и т. д.
Примечание: полужирный мой. файлы проекта обычно представляют собой файлы pom.xml
, переименованные в файлы *.pom
после загрузки связанных артефактов в репозиторий Maven (или установки в локальный кэш Maven).
Из вашего вопроса вы использовали -DgeneratePom=true
, поэтому вы не передали файл libA 'pom.xml
, но новый был сгенерировано автоматически
Сгенерируйте минимальный POM для артефакта, если он не указан через параметр pomFile
. По умолчанию true
, если в локальном репозитории еще нет существующего POM.
Автоматически сгенерированный файл .pom
будет почти пустым (координаты Maven (groupId, ArtifactId, версия), но в нем нет раздела dependencies
), поэтому Maven будет рассматривать libA как библиотеку без транзитивных зависимостей: он не может ни найти, ни угадать.
Следовательно, у вас есть четыре решения (в порядке рекомендации):
- В корпоративной среде настройте корпоративный репозиторий Maven ( как Arifactory, Nexus или Apache Archivia) и должным образом развернуть на нем эти библиотеки, или
- Переустановите libA, используя
pomFile
вариант или
- Вручную добавьте раздел
dependencies
в сгенерированный файл .pom
и добавьте в него libB, или
- Явно объявите libB в вашем потребительском
pom.xml
файле
Для дальнейшего чтения на SO:
person
A_Di-Matteo
schedule
11.04.2016