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 моего проекта и добавляю для libA, Maven не берет libB.

Вопрос: Должно быть, в конце концов, 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

Другие вопросы по тегам