Когда generatePom для maven deploy-file должен быть установлен в false?

Я вызываю файл deploy-file вот так, чтобы загрузить несколько JAR-файлов в мой корпоративный репозиторий:

mvn org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file \
  -Dfile=lib/SomeLib.jar \
  -DrepositoryId=mycompany-central \
  -Durl=http://myserver/artifactory/libs-release-local -DgeneratePom=false \
  -DgroupId=com.some.lib \
  -DartifactId=SomeLib \
  -Dversion=1.2.5.3 

Я поставил generatePom в false в предположении, что я хочу генерировать или изменять как можно меньше. Библиотеки, которые я загружаю, были построены с использованием maven и также содержат POM под META-INF,

Вопрос: При каких условиях, вообще, следует generatePom быть установленным false? Должен generatePom быть установленным false в моем случае?

1 ответ

Решение

pom.xml Файл требуется для транзитивных зависимостей. Транзитивные зависимости - это зависимости, определенные в dependencies раздел, если таковые имеются, .pom файл доступен как часть развернутого артефакта.

.pom файл по сути является копией оригинала pom.xml файл, переименованный в соответствии с именем библиотеки (т.е. artifactId-version.jar, затем artifactId-version.pom).

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

От официального Maven - Введение в механизм зависимости

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

Примечание: жирный - мой. файлы проекта обычно pom.xml файлы, переименованные в *.pom файлы, связанные с артефактами, загружаются в репозиторий Maven (или устанавливаются в локальный кэш Maven).

С помощью -DgeneratePom=false следовательно, мы должны передать pom.xml подать через pomFile вариант, в противном случае (настройка generatePom в true) новый будет создан автоматически

Создайте минимальное POM для артефакта, если ни один не указан через параметр pomFile, По умолчанию true если в локальном хранилище еще нет POM.

Автогенерируемый .pom файл будет почти пуст (Maven координаты (groupId, artifactId, версия), но нет dependencies раздел в нем), следовательно, Maven будет рассматривать этот артефакт как библиотеку без транзитивных зависимостей: он не может найти ни одного, он не может угадать ни того, ни другого.

Это было бы хорошо, если бы на самом деле не требовались переходные зависимости. В противном случае ошибки компиляции (или времени выполнения) могут возникнуть при использовании в качестве зависимости в другом проекте Maven. Если вместо этого артефакт развернут в хранилище сборки, переходные зависимости становятся менее важными, и автоматически сгенерированный pom все еще может быть в порядке.


Из ваших комментариев:

Есть ли разница между сгенерированным pom и использованием pom, извлеченного из JAR?

Как объяснено выше, существуют большие различия между автоматически сгенерированным и оригинальным pom.xml файл. Но это различие, по сути, важно только в том случае, если целевой артефакт будет использован в качестве зависимости maven другим проектом. pom.xml файл хранится в META-INF обычно это копия оригинала.

Кроме того, если я использую pom из JAR-файла deploy-file, просто получим из файла имя артефакта, идентификатор группы и версию?

Да, как указано в официальной документации:

groupId: GroupId артефакта для развертывания. Извлечено из файла POM, если указано. artifactId: ArtifactId артефакта для развертывания. Извлечено из файла POM, если указано. version: Версия артефакта для развертывания. Извлечено из файла POM, если указано.

А также также указано на официальном примере

Обратите внимание, что информация о groupId, artifactId, версии и упаковке автоматически извлекается из данного pom.

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