Типи упаковки Maven

1. Огляд

Тип упаковки є важливим аспектом будь-якого проекту Maven. Він визначає тип артефакту, який виробляє проект. Як правило, збірка виробляє jar , war , pom або інший виконуваний файл.

Maven пропонує безліч типів упаковки за замовчуванням, а також забезпечує гнучкість у визначенні спеціальної упаковки.

У цьому підручнику ми глибоко заглибимось у типи упаковки Maven. Спочатку ми розглянемо життєві цикли побудови в Maven. Потім ми обговоримо кожен тип упаковки, що вони представляють та їх вплив на життєвий цикл проекту. Врешті-решт, ми побачимо, як визначити власний тип упаковки.

2. Типи упаковки за замовчуванням

Maven пропонує багато типів упаковки за замовчуванням, які включають jar , war , ear , pom , rar , ejb та maven-plugin . Кожен тип упаковки відповідає життєвому циклу складання, який складається з фаз. Зазвичай кожна фаза є послідовністю цілей і виконує певне завдання.

Різні типи упаковки можуть мати різну мету на певній фазі. Так , наприклад, в фазі пакету банку типу упаковки, Maven-банку-плагіна «и банки мета виконуються. І навпаки, для військового проекту мета війни maven-war-plugin виконується в ту ж фазу.

2.1. банку

Архів Java - або jar - один із найпопулярніших типів упаковки. Проекти цього типу упаковки створюють стислий zip-файл із розширенням .jar . Він може включати чисті класи Java, інтерфейси, ресурси та файли метаданих.

Для початку давайте розглянемо деякі прив'язки фази до цілі побудови для jar :

  • ресурси: ресурси
  • компілятор: компіляція
  • ресурси: testResources
  • компілятор: testCompile
  • вірний: тест
  • баночка: баночка
  • встановити: встановити
  • розгорнути: розгорнути

Не зволікаючи, визначимо тип упаковки проекту банки :

jar

Якщо нічого не вказано, Maven вважає, що тип упаковки - це банка.

2.2. війни

Простіше кажучи, архів веб-додатків - або війна - містить усі файли, пов’язані з веб-додатком. Він може включати сервлети Java, JSP, HTML-сторінки, дескриптор розгортання та відповідні ресурси. Загалом, війна має ті самі прив'язки до цілей, що і баночка , але за одним винятком - пакетна фаза війни має іншу мету, а саме війну .

Без сумніву, jar та war - найпопулярніші типи упаковки у спільноті Java. Детальна різниця між цими двома може бути цікавим читанням.

Давайте визначимо тип упаковки веб-програми:

war

Інші типи упаковки ejb , par та rar також мають подібні життєві цикли, але кожна з них має іншу мету упаковки.

ejb:ejb or par:par or rar:rar

2.3. вухо

Архів додатків для підприємств - або вухо - це стислий файл, який містить програму J2EE. Він складається з одного або декількох модулів, які можуть бути як веб-модулями (упаковані як військовий файл), так і модулями EJB (упаковані як jar- файл) або обома з них.

Якщо сказати інакше, вухо є надмножиною банок і війн і вимагає сервера додатків для запуску програми, тоді як для війни для його розгортання потрібен лише веб-контейнер або веб-сервер. Аспекти, що відрізняють веб-сервер від сервера додатків, і те, що ці популярні сервери є на Java, є важливими поняттями для розробника Java.

Давайте визначимо цільові прив’язки за замовчуванням для вуха :

  • вухо: create-application-xml
  • ресурси: ресурси
  • вухо: вухо
  • встановити: встановити
  • розгорнути: розгорнути

Ось як ми можемо визначити тип упаковки таких проектів:

ear

2.4. пом

Серед усіх типів упаковки пом є найпростішим. Це допомагає створювати агрегатори та батьківські проекти.

Агрегатор або багатомодульний проект збирає підмодулі, що надходять з різних джерел. Ці підмодулі є звичайними проектами Maven і відповідають їх власним життєвим циклам побудови. Агрегатор POM має всі посилання на підмодулі під елементом модулі .

Батьківський проект дозволяє визначити відносини успадкування між POM. Батьківський POM спільно використовує певні конфігурації, плагіни та залежності, а також їх версії. Більшість елементів від батьків успадковуються його нащадками - винятки включають artifactId , ім'я та передумови .

Оскільки немає ресурсів для обробки та коду для компіляції чи тестування. Отже, артефакти проектів pom генерують себе замість будь-якого виконуваного файлу.

Давайте визначимо тип упаковки багатомодульного проекту:

pom

Такі проекти мають найпростіший життєвий цикл, який складається лише з двох етапів: встановлення та розгортання .

2.5. maven-плагін

Maven пропонує безліч корисних плагінів. Однак можуть бути випадки, коли плагінів за замовчуванням недостатньо. У цьому випадку інструмент забезпечує гнучкість для створення плагіна maven відповідно до потреб проекту.

Щоб створити плагін, встановіть тип упаковки проекту:

maven-plugin

Maven-плагін має життєвий цикл , схожий на банку «з життєвим циклом, але з двома винятками:

  • plugin: descriptor is bound to the generate-resources phase
  • plugin: addPluginArtifactMetadata is added to the package phase

For this type of project, a maven-plugin-api dependency is required.

2.6. ejb

Enterprise Java Beans – or ejb – help to create scalable, distributed server-side applications. EJBs often provide the business logic of an application. A typical EJB architecture consists of three components: Enterprise Java Beans (EJBs), the EJB container, and an application server.

Now, let's define the packaging type of the EJB project:

ejb

The ejb packaging type also has a similar lifecycle as jar packaging, but with a different package goal. The package goal for this type of project is ejb:ejb.

The project, with ejb packaging type, requires a maven-ejb-plugin to execute lifecycle goals. Maven provides support for EJB 2 and 3. If no version is specified, then default version 2 is used.

2.7. rar

Resource adapter – or rar – is an archive file that serves as a valid format for the deployment of resource adapters to an application server. Basically, it is a system-level driver that connects a Java application to an enterprise information system (EIS).

Here's the declaration of packaging type for a resource adapter:

rar

Every resource adapter archive consists of two parts: a jar file that contains source code and a ra.xml that serves as a deployment descriptor.

Again, the lifecycle phases are the same as a jar or war packaging with one exception: Thepackage phase executes the rar goal that consists of a maven-rar-plugin to package the archives.

3. Other Packaging Types

So far, we've looked at various packaging types that Maven offers as default. Now, let's imagine we want our project to produce an artifact with a .zip extension. In this case, the default packaging types can't help us.

Maven also provides some more packaging types through plugins. With the help of these plugins, we can define a custom packaging type and its build lifecycle. Some of these types are:

  • msi
  • rpm
  • tar
  • tar.bz2
  • tar.gz
  • tbz
  • zip

To define a custom type, we have to define its packagingtype and phases in its lifecycle. For this, create a components.xml file under the src/main/resources/META-INF/plexus directory:

 org.apache.maven.lifecycle.mapping.LifecycleMapping zip org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping   org.apache.maven.plugins:maven-resources-plugin:resources com.baeldung.maven.plugins:maven-zip-plugin:zip org.apache.maven.plugins:maven-install-plugin:install org.apache.maven.plugins:maven-deploy-plugin:deploy   

Until now, Maven doesn't know anything about our new packaging type and its lifecycle. To make it visible, let's add the plugin in the pom file of the project and set extensions to true:

  com.baeldung.maven.plugins maven-zip-plugin true  

Now, the project will be available for a scan, and the system will look into plugins and compnenets.xml file, too.

Крім усіх цих типів, Maven пропонує багато інших типів упаковки завдяки зовнішнім проектам та плагінам. Наприклад, nar (власний архів), swf та swc - це типи упаковки для проектів, що виробляють вміст Adobe Flash та Flex. Для таких проектів нам потрібен плагін, який визначає спеціальну упаковку, та сховище, що містить плагін.

4. Висновок

У цій статті ми розглянули різні типи упаковки, доступні в Maven. Крім того, ми ознайомилися з тим, що представляють ці типи та чим вони відрізняються у своєму життєвому циклі. Врешті-решт, ми також дізналися, як визначити власний тип упаковки та налаштувати життєвий цикл збірки за замовчуванням.

Всі приклади коду на Baeldung побудовані за допомогою Maven. Обов’язково ознайомтесь з різними конфігураціями Maven через 0n GitHub.