Когда 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.