Maven-verpakkingstypen

1. Overzicht

Het verpakkingstype is een belangrijk aspect van elk Maven-project. Het specificeert het type artefact dat het project produceert. Over het algemeen produceert een build een pot, oorlog, pom, of een ander uitvoerbaar bestand.

Maven biedt veel standaard verpakkingstypen en biedt ook de flexibiliteit om een ​​aangepaste verpakking te definiëren.

In deze tutorial gaan we dieper in op Maven-verpakkingstypen. Eerst kijken we naar de bouwlevenscycli in Maven. Vervolgens bespreken we elk verpakkingstype, wat ze vertegenwoordigen en hun effect op de levenscyclus van het project. Uiteindelijk zullen we zien hoe we een aangepast verpakkingstype kunnen definiëren.

2. Standaard verpakkingstypen

Maven biedt veel standaard verpakkingstypen met een pot, oorlog, oor, pom, rar, ejb, en maven-plugin. Elk verpakkingstype volgt een build-levenscyclus die uit fasen bestaat. Gewoonlijk is elke fase een opeenvolging van doelen en voert het een specifieke taak uit.

Verschillende verpakkingstypen kunnen in een bepaalde fase een ander doel hebben. Bijvoorbeeld in de pakketfase van pot verpakkingstype, maven-jar-pluginHet doel van de pot wordt uitgevoerd. Omgekeerd, voor een oorlog project, maven-war-plugin'S oorlogsdoel wordt in dezelfde fase uitgevoerd.

2.1. pot

Java-archief - of pot - is een van de meest populaire verpakkingstypen. Projecten met dit verpakkingstype produceren een gecomprimeerd zip-bestand met de .pot uitbreiding. Het kan pure Java-klassen, interfaces, bronnen en metagegevensbestanden bevatten.

Laten we om te beginnen eens kijken naar enkele van de standaarddoel-tot-build-fase-bindingen voor het pot:

  • middelen: middelen
  • compiler: compileren
  • middelen: testResources
  • compiler: testCompile
  • zeker: test
  • pot: pot
  • installeren: installeren
  • inzetten: inzetten

Laten we zonder uitstel het verpakkingstype van een pot project:

pot

Als er niets is gespecificeerd, gaat Maven ervan uit dat het verpakkingstype een pot.

2.2. oorlog

Simpel gezegd, een webapplicatiearchief - of oorlog - bevat alle bestanden gerelateerd aan een webapplicatie. Het kan Java-servlets, JSP's, HTML-pagina's, een implementatiedescriptor en gerelateerde bronnen bevatten. Al met al, oorlog heeft dezelfde doelbindingen als een pot, maar met één uitzondering: de pakketfase van het oorlog heeft een ander doel, namelijk oorlog.

Zonder twijfel, pot en oorlog zijn de meest populaire verpakkingstypen in de Java-gemeenschap. Een gedetailleerd verschil tussen deze twee kan interessant zijn om te lezen.

Laten we het verpakkingstype van een webapplicatie definiëren:

oorlog

De andere soorten verpakkingen ejb, par, en rar hebben ook vergelijkbare levenscycli, maar elk heeft een ander pakketdoel.

ejb:ejb of par:par of rar:rar

2.3. oor

Archief van bedrijfsapplicaties - of oor - is een gecomprimeerd bestand dat een J2EE-applicatie bevat. Het bestaat uit een of meer modules die ofwel webmodules kunnen zijn (verpakt als een oorlog bestand) of EJB-modules (verpakt als een pot bestand) of beide.

Anders gezegd, de oor is een superset van potten en oorlogen en vereist een applicatieserver om de applicatie uit te voeren, terwijl oorlog vereist alleen een webcontainer of webserver om het te implementeren. De aspecten die een webserver onderscheiden van een applicatieserver, en wat die populaire servers in Java zijn, zijn belangrijke concepten voor een Java-ontwikkelaar.

Laten we de standaarddoelbindingen definiëren voor de oor:

  • oor: genereren-applicatie-xml
  • middelen: middelen
  • oor: oor
  • installeren: installeren
  • inzetten: inzetten

Hier leest u hoe we het verpakkingstype van dergelijke projecten kunnen definiëren:

oor

2.4. pom

Van alle soorten verpakkingen, pom is de eenvoudigste. Het helpt om aggregators en bovenliggende projecten te maken.

Een aggregator of project met meerdere modules stelt submodules samen die afkomstig zijn uit verschillende bronnen. Deze submodules zijn reguliere Maven-projecten en volgen hun eigen build-lifecycles. De aggregator POM heeft alle referenties van submodules onder de modules element.

Met een bovenliggend project kunt u de overervingsrelatie tussen POM's definiëren. De bovenliggende POM deelt bepaalde configuraties, plug-ins en afhankelijkheden, samen met hun versies. De meeste elementen van de ouder worden overgeërfd door de onderliggende elementen - uitzonderingen zijn onder meer artefact-id, naam, en voorwaarden.

Omdat er geen bronnen zijn om te verwerken en geen code om te compileren of te testen. Daarom genereren de artefacten van pom-projecten zichzelf in plaats van enig uitvoerbaar bestand.

Laten we het verpakkingstype van een project met meerdere modules definiëren:

pom

Dergelijke projecten hebben de eenvoudigste levenscyclus die uit slechts twee stappen bestaat: installeren en inzetten.

2.5. maven-plugin

Maven biedt een scala aan handige plug-ins. Er kunnen echter gevallen zijn waarin standaardplug-ins niet voldoende zijn. In dit geval biedt de tool de flexibiliteit om een ​​maven-plug-in te maken, afhankelijk van de projectbehoeften.

Om een ​​plug-in te maken, stelt u het verpakkingstype van het project in:

maven-plugin

De maven-plugin heeft een levenscyclus vergelijkbaar met pot‘S levenscyclus, maar met twee uitzonderingen:

  • inpluggen: descriptor is gebonden aan de fase van het genereren van middelen
  • inpluggen: addPluginArtifactMetadata wordt toegevoegd aan de pakketfase

Voor dit type project is een maven-plugin-api afhankelijkheid is vereist.

2.6. ejb

Enterprise Java Beans - of ejb - helpen bij het creëren van schaalbare, gedistribueerde server-side applicaties. EJB's bieden vaak de bedrijfslogica van een applicatie. Een typische EJB-architectuur bestaat uit drie componenten: Enterprise Java Beans (EJB's), de EJB-container en een applicatieserver.

Laten we nu het verpakkingstype van het EJB-project definiëren:

ejb

De ejb verpakkingstype heeft ook een vergelijkbare levenscyclus als pot verpakking, maar met een ander pakketdoel. Het pakketdoel voor dit type project is ejb:ejb.

Het project, met ejb verpakkingstype, vereist een maven-ejb-plugin om levenscyclusdoelen uit te voeren. Maven biedt ondersteuning voor EJB 2 en 3. Als er geen versie is opgegeven, wordt standaardversie 2 gebruikt.

2.7. rar

Bronadapter - of rar - is een archiefbestand dat dient als een geldig formaat voor de implementatie van bronadapters op een applicatieserver. In feite is het een stuurprogramma op systeemniveau dat een Java-toepassing verbindt met een bedrijfsinformatiesysteem (EIS).

Hier is de verklaring van het verpakkingstype voor een bronadapter:

rar

Elk bronadapterarchief bestaat uit twee delen: a pot bestand dat de broncode en een ra.xml dat dient als een plaatsingsdescriptor.

Nogmaals, de levenscyclusfasen zijn hetzelfde als een pot of oorlog verpakking met één uitzondering: Depakket phase voert het rar doel dat bestaat uit een maven-rar-plugin om de archieven te verpakken.

3. Andere verpakkingstypen

Tot nu toe hebben we gekeken naar verschillende verpakkingstypen die Maven standaard aanbiedt. Laten we ons nu eens voorstellen dat we willen dat ons project een artefact produceert met een .zip uitbreiding. In dit geval kunnen de standaardverpakkingen ons niet helpen.

Maven biedt ook wat meer verpakkingstypen via plug-ins. Met behulp van deze plug-ins kunnen we een aangepast verpakkingstype en de bouwlevenscyclus ervan definiëren. Enkele van deze soorten zijn:

  • msi
  • tpm
  • teer
  • tar.bz2
  • tar.gz
  • tbz
  • zip

Om een ​​aangepast type te definiëren, moeten we zijn verpakkingtype en fasen in zijn levenscyclus. Maak hiervoor een componenten.xml bestand onder het 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: installeer org.apache.maven.plugins: maven-deploy-plugin: deploy 

Tot nu toe weet Maven niets over ons nieuwe verpakkingstype en zijn levenscyclus. Om het zichtbaar te maken, voegen we de plug-in toe aan het pom bestand van het project en set extensies naar waar:

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

Nu is het project beschikbaar voor een scan en zal het systeem onderzoeken plug-ins en compnenets.xml bestand ook.

Naast al deze soorten biedt Maven veel andere soorten verpakkingen aan via externe projecten en plug-ins. Bijvoorbeeld, nar (eigen archief), swf, en swc zijn verpakkingstypen voor de projecten die Adobe Flash- en Flex-inhoud produceren. Voor dergelijke projecten hebben we een plug-in nodig die een aangepaste verpakking definieert en een opslagplaats die de plug-in bevat.

4. Conclusie

In dit artikel hebben we gekeken naar verschillende verpakkingstypen die beschikbaar zijn in Maven. We zijn ook bekend geraakt met wat deze typen vertegenwoordigen en hoe ze verschillen in hun levenscyclus. Uiteindelijk hebben we ook geleerd hoe we een aangepast verpakkingstype kunnen definiëren en de standaard buildlevenscyclus kunnen aanpassen.

Alle codevoorbeelden op Baeldung zijn gebouwd met Maven. Bekijk zeker onze verschillende Maven-configuraties via 0n GitHub.


$config[zx-auto] not found$config[zx-overlay] not found