Видове опаковки на Maven

1. Общ преглед

Типът опаковка е важен аспект на всеки проект на Maven. Той определя вида на артефакта, който проектът произвежда. Като цяло, компилацията произвежда буркан , война , пом или друг изпълним файл.

Maven предлага много видове опаковки по подразбиране, а също така предоставя гъвкавост за дефиниране на персонализирана.

В този урок ще разгледаме дълбоко типовете опаковки на Maven. Първо ще разгледаме жизнения цикъл на изграждане в Maven. След това ще обсъдим всеки тип опаковка, какво представляват и техния ефект върху жизнения цикъл на проекта. В крайна сметка ще видим как да дефинираме персонализиран тип опаковка.

2. Типове опаковки по подразбиране

Maven предлага много видове опаковки по подразбиране, които включват буркан , война , ухо , пом , рар , ejb и приставка за maven . Всеки тип опаковка следва жизнен цикъл на изграждане, който се състои от фази. Обикновено всяка фаза е последователност от цели и изпълнява определена задача.

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

2.1. буркан

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

Като начало, нека разгледаме някои от обвързванията по фаза за цел за изграждане по подразбиране за бурканчето :

  • ресурси: ресурси
  • компилатор: компилиране
  • ресурси: testResources
  • компилатор: testCompile
  • сигурен: тест
  • буркан: буркан
  • инсталиране: инсталиране
  • разполагане: разполагане

Без забавяне, нека дефинираме типа опаковка на проект за буркан :

jar

Ако не е посочено нищо, Maven приема, че видът на опаковката е буркан.

2.2. война

Най-просто казано, архив на уеб приложение - или война - съдържа всички файлове, свързани с уеб приложение. Той може да включва Java сървлети, JSP, HTML страници, дескриптор за разполагане и свързани ресурси. Като цяло войната има същите обвързващи цели като буркан , но с едно изключение - пакетната фаза на войната има различна цел, която е война .

Без съмнение бурканът и войната са най-популярните видове опаковки в общността на Java. Подробна разлика между тези две може да е интересно четиво.

Нека дефинираме типа опаковка на уеб приложение:

war

Другите видове опаковки ejb , par и rar също имат сходен жизнен цикъл, но всеки има различна цел на пакета.

ejb:ejb or par:par or rar:rar

2.3. ухо

Архив на корпоративно приложение - или ухо - е компресиран файл, който съдържа J2EE приложение. Състои се от един или повече модули, които могат да бъдат или уеб модули (опаковани като военен файл) или EJB модули (опаковани като jar файл) или и двата.

Казано по различен начин, ухото е супер набор от буркани и войни и изисква сървър на приложения, за да стартира приложението, докато войната изисква само уеб контейнер или уеб сървър, за да го разположи. Аспектите, които отличават уеб сървъра от сървъра на приложения, и това, което тези популярни сървъри са в Java, са важни концепции за Java разработчик.

Нека дефинираме обвързването по подразбиране за ухото :

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

Ето как можем да определим вида на опаковката на такива проекти:

ear

2.4. пом

Сред всички видове опаковки pom е най-простият. Помага за създаването на агрегатори и родителски проекти.

Агрегатор или многомодулен проект сглобява подмодули, идващи от различни източници. Тези подмодули са редовни проекти на Maven и следват собствения си жизнен цикъл. Агрегаторът POM има всички препратки към подмодули под елемента модули .

Родителски проект ви позволява да дефинирате връзката за наследяване между POM. Родителският POM споделя определени конфигурации, приставки и зависимости, заедно с техните версии. Повечето елементи от родителя се наследяват от неговите деца - изключенията включват artefactId , име и предпоставки .

Тъй като няма ресурси за обработка и код за компилиране или тестване. Следователно, артефактите на pom проекти се генерират сами, вместо изпълними файлове.

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

pom

Такива проекти имат най-простия жизнен цикъл, който се състои само от две стъпки: инсталиране и внедряване .

2.5. maven-plugin

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

За да създадете приставка, задайте типа опаковка на проекта:

maven-plugin

The 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.