Maven установить транзитивные зависимости
У меня есть проект, и мне нужно установить библиотеку в Maven, чтобы я мог использовать ее в указанном проекте. Проблема, с которой я столкнулся, заключается в том, что указанная библиотека, скажем, libA, сама имеет зависимость, libB, которая также является сторонней.
Я добавил оба в мой локальный репозиторий, используя этот код:
mvn install:install-file -Dfile=VerBDConverter.jar -DgroupId=verbdconverter
-DartifactId=verbdconverter -Dversion=1.00 -Dpackaging=jar -DgeneratePom=true
Сделал то же самое для lib 2. Проблема в том, что когда я захожу в pom моего проекта и добавляю
Вопрос: Должно быть, в конце концов, Maven должен получить зависимости libA, но это не так.
2 ответа
В конце концов, 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:
Это может помочь вам:
call mvn install:install-file -Dfile=sqljdbc.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc1 -Dversion=1.0 -Dpackaging=jar
call mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar
call mvn install:install-file -Dfile=sqljdbc41.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar
Источник: https://github.com/Programmercito/osbo-framework/blob/master/libs/instala.bat