Що таке упаковка «пом» у maven?


175

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

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


3
mvn install - це використовується для встановлення вашого артефакту (банку, війни, вуха) у вашому локальному сховищі (зазвичай це буде ~ / .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, який не потребує складений.


Інший приклад, який я можу придумати у подібних рядках, як пом-проект ==> абстрактний клас та модуль (и) всередині нього ==> конкретні класи (и).
бхаратж

22

Упаковка pomвикористовується в проектах, що об'єднують інші проекти, і в проектах, єдиним корисним результатом яких є доданий артефакт з якогось плагіна. У вашому випадку я б здогадався, що ваш верхній рівень пам’ятки включає <modules>...</modules>агрегацію інших каталогів, а фактичний вихід є результатом одного з інших (можливо, під-) каталогів. Якщо для цієї мети чітко зашифровано, вона матиме упаковку war.


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 багатомодульний, кожен модуль матиме два файли, як описано вище, за винятком проекту верхнього рівня, який матиме лише пом.

8

Упаковка артефакту як POM означає, що він має дуже простий життєвий цикл

package -> install -> deploy

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

Це корисно, якщо ви розгортаєте файл pom.xml або проект, який не відповідає іншим типам упаковки.

Ми використовуємо упаковку з пом для багатьох наших проектів і пов'язуємо додаткові фази та цілі, якщо це доречно.

Наприклад, деякі наші програми використовують:

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

Тут мій-webapp - це веб-проект, який залежить від коду в моєму додатку. Таким чином, щоб поєднати два проекти в один, ми маємо верхній рівень pom.xml, який згадує, які проекти (модулі відповідно до термінології Maven), які потрібно нарешті поєднати. Такі верхні рівні pom.xml можуть використовувати упаковку з пом.

my-webapp може мати військову упаковку і може залежати від мого додатка. мій додаток може мати пакувальну банку.


2

Справа використання реального життя

У Java-важкій компанії у нас був проект python, який потребував переходу у сховище артефактів Nexus. Python насправді не має артефактів, тому просто просто хотів .tar або .zip файли python та натиснути. Репо вже були Maven інтеграції, тому ми використовували <packaging>pom</packaging>позначення з Maven збірки плагін для упаковки пітона проект як .zipі завантажити його.

Етапи викладені в цій публікації ЗП


1

"Pom" упаковка - це не що інше, як контейнер, який містить інші пакунки / модулі, такі як банку, війна та вуха.

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

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


1

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

Тип упаковки, необхідний для пам’яті для батьків та об'єднаних (мультимодульних) проектів. Ці типи визначають цілі, пов'язані з набором етапів життєвого циклу. Наприклад, якщо упаковка є банку, то фаза пакета виконає мету jar: jar. Якщо упаковка помпонна, ціль буде виконана: site-attach-descriptor


0

POM (Project Object Model) - це не що інше, як сценарій автоматизації для побудови проекту, ми можемо записати сценарій автоматизації в XML, файли сценаріїв будівлі в різних інструментах автоматизації називаються різними способами

як ми називаємо build.xml в ANT, pom.xml в MAVEN

MAVEN може упакувати банки, війни, вуха та POM, що нове для всіх нас

якщо ви хочете перевірити, що таке POM.XML

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.