it-swarm.com.ru

Что такое "пом" упаковка в Maven?

Мне дали проект maven для компиляции и установки на сервере Tomcat. Я никогда не использовал maven до сегодняшнего дня, но я немного гуглил. Похоже, что для файлов верхнего уровня pom.xml в этом проекте тип упаковки установлен как pom.

Что я должен делать после mvn install для развертывания этого приложения? Я ожидал, что смогу найти файл war где-нибудь или что-то, но я думаю, что я смотрю в неправильном месте или пропускаю шаг.

146
Derek

pom в основном представляет собой контейнер подмодулей, каждый подмодуль представлен подкаталогом в том же каталоге, что и pom.xml с упаковкой pom.

Где-то во вложенной в структуру проекта вы найдете артефакты (модули) с упаковкой war. Обычно Maven встраивает все в подкаталоги /target каждого модуля. Поэтому после mvn install загляните в подкаталог target в модуле с упаковкой war.

Конечно:

$ find . -iname "*.war"

работает одинаково хорошо ;-).

123
Tomasz Nurkiewicz

упаковка pom - это просто спецификация, в которой говорится, что основным артефактом является не война или баночка, а сам pom.xml.

Часто он используется вместе с «модулями», которые обычно содержатся в подкаталогах рассматриваемого проекта; тем не менее, он также может использоваться в определенных сценариях, где не предполагалось создание первичного двоичного файла, все другие важные артефакты были объявлены как вторичные артефакты. 

Подумайте о проекте «документация», основным артефактом может быть PDF, но он уже собран, и может потребоваться работа по объявлению его вторичным артефактом в конфигурации, чтобы сообщить maven, как создать PDF, который не нужно скомпилировать.

36
Edwin Buck

Упаковка pom используется в проектах, которые объединяют другие проекты, и в проектах, единственным полезным выводом которых является прикрепленный артефакт из какого-либо плагина. В вашем случае, я бы предположил что ваш pom верхнего уровня включает в себя <modules>...</modules> для объединения других каталогов, а фактический вывод является результатом одного из других (возможно, под) каталогов. В случае разумного кодирования он будет иметь упаковку war.

20
bmargulies

Упаковка артефакта в виде POM означает, что у него очень простой жизненный цикл

package -> install -> deploy

http://maven.Apache.org/guides/introduction/introduction-to-the-lifecycle.html

Это полезно, если вы развертываете файл pom.xml или проект, который не подходит для других типов упаковки.

Мы используем упаковку pom для многих наших проектов и привязываем дополнительные фазы и цели в зависимости от ситуации.

Например, некоторые из наших приложений используют:

prepare-package -> test -> package -> install -> deploy

Когда вы устанавливаете приложение mvn, оно должно добавить его в локальный репозиторий .m2. Для публикации в другом месте вам необходимо настроить правильную информацию об управлении распространением. Вам также может понадобиться использовать вспомогательный плагин maven builder, если артефакты не присоединяются автоматически к Maven.

7
James Morgan

Чтобы просто ответить на ваш вопрос при выполнении mvn: install , maven создаст упакованный артефакт на основе (атрибут packaging в pom.xml). После запуска установки maven вы можете найти файл с расширение пакета

  • В целевой директории рабочей области проекта
  • Также, если ваш maven 2 локальный репозиторий выполняет поиск (.m2/respository) в вашем ящике, ваш артефакт указан в репозитории .m2 в каталоге (groupId/artifactId/artifactId-version.packaging) каталог
  • Если вы загляните в каталог, то найдете упакованный файл расширения, а также расширение pom (расширение pom - это, в основном, файл pom.xml, используемый для создания этого пакета).
  • Если ваш проект maven является многомодульным, каждый модуль будет иметь два файла, как описано выше, за исключением проекта верхнего уровня, который будет иметь только pom 
7
Prasanna Talakanti

Я предлагаю посмотреть классический пример по адресу: http://maven.Apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

Здесь my-webapp - это веб-проект, который зависит от кода в проекте my-app. Итак, чтобы объединить два проекта в один, у нас есть верхний уровень pom.xml, в котором указано, какие проекты (модули согласно терминологии maven) должны быть окончательно объединены. Такой верхний уровень pom.xml может использовать упаковку pom.

my-webapp может иметь упаковку war и может зависеть от my-app. my-app может иметь упаковку в банку.

3
Vishal

https://maven.Apache.org/pom.html

Тип упаковки должен быть pom для родительских и агрегированных (многомодульных) проектов. Эти типы определяют цели, связанные с набором этапов жизненного цикла. Например, если упаковка - это jar, то фаза пакета выполнит цель jar: jar. Если упаковка pom, выполняемой целью будет сайт: attach-descriptor

1
TaylorChen

Реальный пример использования 

В Java-тяжелой компании у нас был проект Python, который должен был войти в репозиторий артефактов Nexus. Python на самом деле не имеет артефактов, поэтому просто хотел .tar или .Zip файлы python и Push. В репозитории уже была интеграция с maven, поэтому мы использовали обозначение <packaging>pom</packaging> с плагином maven Assembly , чтобы упаковать проект python в виде .Zip и загрузить его.

Действия описаны в этом SO сообщении

1
Adam Hughes

Упаковка «pom» - это не что иное, как контейнер, который содержит другие пакеты/модули, такие как jar, war и ear. 

если вы выполняете какие-либо операции с внешним пакетом/контейнером, такие как mvn clean compile install. тогда внутренние пакеты/модули также получают чистую установку компиляции.

нет необходимости выполнять отдельную операцию для каждого пакета/модуля.

0
Abdul Gafoor

POM (Project Object Model) - не что иное, как сценарий автоматизации для построения проекта, мы можем написать сценарий автоматизации в XML, Файлы сценариев построения названы по-разному в разных инструментах автоматизации

как мы называем build.xml в ANT, pom.xml в MAVEN

MAVEN может упаковывать банки, войны, уши и POM, что является новым для всех нас

если вы хотите проверить ЧТО IS POM.XML

0
Venky Vungarala