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

176

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

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

Дерек
источник
3
mvn install - используется для установки вашего артефакта (jar, war, ear) в ваш локальный репозиторий (обычно это будет ~ / .m2 / директория репозитория)
Łukasz Siwiński

Ответы:

148

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

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

Конечно:

$ find . -iname "*.war"

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

Томаш Нуркевич
источник
45

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

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

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

Эдвин Бак
источник
Другой пример, который я могу представить в похожих строках как pom project ==> абстрактный класс и модуль (и) внутри него ==> конкретный класс (ы).
Бхарадж
22

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

bmargulies
источник
1
Что вы подразумеваете под "чей единственный полезный вывод - это прикрепленный артефакт из какого-то плагина"?
omjego
9

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

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

Упаковка артефакта в виде 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.

Джеймс Морган
источник
6

Я предлагаю посмотреть классический пример по адресу: 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 может иметь упаковку для банок.

Вишал
источник
2

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

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

Шаги изложены в этом посте SO

Адам Хьюз
источник
1

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

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

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

Абдул Гафур
источник
1

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

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

TaylorChen
источник
0

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

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

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

если хочешь проверь что такое POM.XML

Венки Вунгарала
источник