Перейти к основному содержимому

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

· 7 мин. чтения

1. Обзор

Тип упаковки — важный аспект любого проекта Maven. Он определяет тип артефакта, создаваемого проектом. Как правило, сборка создает jar , war , pom или другой исполняемый файл.

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

В этом руководстве мы подробно рассмотрим типы упаковки Maven. Сначала мы рассмотрим жизненные циклы сборки в Maven. Затем мы обсудим каждый тип упаковки, что они собой представляют и их влияние на жизненный цикл проекта. В конце мы увидим, как определить пользовательский тип упаковки.

2. Типы упаковки по умолчанию

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

Различные типы упаковки могут иметь разные цели на определенном этапе. Например, на этапе упаковки типа упаковки jar выполняется цель jar maven-jar-plugin . И наоборот, для военного проекта военная цель maven-war-plugin выполняется на той же фазе.

2.1. банка

Архив Java — или jar — один из самых популярных типов упаковки. Проекты с этим типом упаковки создают сжатый ZIP-файл с расширением .jar . Он может включать чистые классы Java, интерфейсы, ресурсы и файлы метаданных.

Для начала давайте посмотрим на некоторые из стандартных привязок к фазе сборки для jar :

  • ресурсы: ресурсы
  • компилятор: скомпилировать
  • ресурсы: testResources
  • компилятор: testCompile
  • верный ответ: тест
  • банка: банка
  • установить: установить
  • развернуть: развернуть

Без промедления определим тип упаковки jar - проекта:

<packaging>jar</packaging>

Если ничего не указано, Maven предполагает, что тип упаковки — банка.

2.2. война

Проще говоря, архив веб-приложений — или war — содержит все файлы, связанные с веб-приложением. Он может включать сервлеты Java, JSP, HTML-страницы, дескриптор развертывания и связанные ресурсы. В целом, война имеет те же цели, что и jar , но с одним исключением — пакетная фаза войны имеет другую цель — войну .

Без сомнения, jar и war — самые популярные типы пакетов в сообществе Java. Подробная разница между этими двумя может быть интересным чтением.

Определим тип упаковки веб-приложения:

<packaging>war</packaging>

Другие типы пакетов ejb , par и rar также имеют схожие жизненные циклы, но у каждого из них своя цель.

ejb: ejb или par: par или rar: rar

2.3. ухо

Архив корпоративных приложений — или ear — представляет собой сжатый файл, содержащий приложение J2EE. Он состоит из одного или нескольких модулей, которые могут быть либо веб-модулями (упакованными в виде файла войны ), либо модулями EJB (упакованными в виде файла jar ), либо обоими из них.

Другими словами, ear представляет собой надмножество jars и wars и требует сервера приложений для запуска приложения, тогда как war требует только веб-контейнера или веб-сервера для его развертывания. Аспекты, отличающие веб-сервер от сервера приложений, и то, что представляют собой эти популярные серверы в Java , являются важными понятиями для Java-разработчика.

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

  • ухо: сгенерировать-приложение-xml
  • ресурсы: ресурсы
  • ухо: ухо
  • установить: установить
  • развернуть: развернуть

Вот как мы можем определить тип упаковки таких проектов:

<packaging>ear</packaging>

2.4. помпон

Среди всех видов упаковки помпон — самый простой. Это помогает создавать агрегаторы и родительские проекты.

Агрегатор или многомодульный проект собирает подмодули из разных источников. Эти подмодули являются обычными проектами Maven и следуют своим собственным жизненным циклам сборки. Агрегатор POM имеет все ссылки на подмодули в элементе modules .

Родительский проект позволяет определить отношения наследования между POM. Родительский POM совместно использует определенные конфигурации, плагины и зависимости, а также их версии. Большинство элементов от родителя наследуются его дочерними элементами — исключения включают ArtiftId , name и Prepresives .

Потому что нет ресурсов для обработки и нет кода для компиляции или тестирования. Следовательно, артефакты проектов pom генерируются сами по себе, а не исполняемые файлы.

Определим тип упаковки многомодульного проекта:

<packaging>pom</packaging>

У таких проектов самый простой жизненный цикл, состоящий всего из двух шагов: установка и развертывание .

2.5. maven-плагин

Maven предлагает множество полезных плагинов. Однако могут быть случаи, когда плагинов по умолчанию недостаточно. В этом случае инструмент обеспечивает гибкость создания maven-плагина в соответствии с потребностями проекта.

Для создания плагина задайте тип упаковки проекта:

<packaging>maven-plugin</packaging>

Жизненный цикл maven-plugin аналогичен жизненному циклу jar , но с двумя исключениями:

  • плагин: дескриптор привязан к фазе генерации ресурсов
  • плагин: addPluginArtifactMetadata добавляется в фазу пакета

Для этого типа проекта требуется зависимость maven-plugin-api .

2.6. ejb

Enterprise Java Beans, или ejb , помогает создавать масштабируемые распределенные серверные приложения. EJB часто обеспечивают бизнес-логику приложения. Типичная архитектура EJB состоит из трех компонентов: Enterprise Java Beans (EJB), контейнера EJB и сервера приложений.

Теперь давайте определим тип упаковки проекта EJB:

<packaging>ejb</packaging>

Тип упаковки ejb также имеет аналогичный жизненный цикл упаковки jar , но с другой целью. Целью пакета для этого типа проекта является ejb: ejb .

Проекту с типом упаковки ejb требуется подключаемый модуль maven-ejb для выполнения целей жизненного цикла. Maven обеспечивает поддержку EJB 2 и 3. Если версия не указана, используется версия 2 по умолчанию.

2.7. рар

Адаптер ресурсов — или rar — это файл архива, который служит допустимым форматом для развертывания адаптеров ресурсов на сервере приложений. По сути, это драйвер системного уровня, который соединяет приложение Java с корпоративной информационной системой (EIS).

Вот объявление типа упаковки для адаптера ресурсов:

<packaging>rar</packaging>

Каждый архив адаптера ресурсов состоит из двух частей: файла jar , содержащего исходный код, и файла ra.xml , который служит дескриптором развертывания.

Опять же, фазы жизненного цикла такие же, как у упаковки jar или war , за одним исключением: фаза упаковки выполняет цель rar , состоящую из maven-rar-plugin для упаковки архивов .

3. Другие типы упаковки

До сих пор мы рассматривали различные типы упаковки, которые Maven предлагает по умолчанию. Теперь давайте представим, что мы хотим, чтобы наш проект создавал артефакт с расширением .zip . В этом случае типы упаковки по умолчанию нам не помогут.

Maven также предоставляет несколько дополнительных типов упаковки через плагины. С помощью этих плагинов мы можем определить собственный тип упаковки и жизненный цикл ее сборки. Вот некоторые из этих типов:

  • мси
  • об/мин
  • смола
  • tar.bz2
  • tar.gz
  • тбз
  • молния

Чтобы определить пользовательский тип, мы должны определить его тип упаковки и этапы его жизненного цикла . Для этого создайте файл component.xml в каталоге src/main/resources/META-INF/plexus : ``

<component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>zip</role-hint>
<implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
<configuration>
<phases>
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<package>com.foreach.maven.plugins:maven-zip-plugin:zip</package>
<install>org.apache.maven.plugins:maven-install-plugin:install</install>
<deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
</phases>
</configuration>
</component>

До сих пор Maven ничего не знает о нашем новом типе упаковки и ее жизненном цикле. Чтобы сделать его видимым, давайте добавим плагин в файл pom проекта и установим расширения в true :

<plugins>
<plugin>
<groupId>com.foreach.maven.plugins</groupId>
<artifactId>maven-zip-plugin</artifactId>
<extensions>true</extensions>
</plugin>
</plugins>

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

Помимо всех этих типов, Maven предлагает множество других типов упаковки через внешние проекты и плагины. Например, nar (собственный архив), swf и swc — это типы упаковки для проектов, создающих содержимое Adobe Flash и Flex. Для таких проектов нам нужен плагин, определяющий индивидуальную упаковку, и репозиторий, содержащий плагин.

4. Вывод

В этой статье мы рассмотрели различные типы пакетов, доступные в Maven. Кроме того, мы познакомились с тем, что представляют собой эти типы и чем они отличаются по своим жизненным циклам. В конце концов, мы также узнали, как определить собственный тип упаковки и настроить жизненный цикл сборки по умолчанию.

Все примеры кода в ForEach построены с использованием Maven. Обязательно ознакомьтесь с нашими различными конфигурациями Maven на GitHub .