Maven, som tillämpar en livscykelbaserad ansats, kommer med en tydligt fördefinierad bygg- och distribueringsprocess där användaren endast behöver lära sig ett litet antal kommandon för att bygga sin artefakt. I POM:en talar vi om hur projektet ska se ut och vad det ska innehålla. Här definierar vi upp hur projektet paketeras och vilka beroenden det har. Hur Maven sedan hanterar projektet när det utför sitt jobb bestäms genom mål (goals) knutna till ett gäng bestämda faser (phases) i olika livscykler (lifecycles).

Kort och gott innebär detta att du, när du kör ett Mavenkommando, talar om för Maven att gå igenom ett antal faser och att exekvera de mål som hör till varje fas.

Illustration över Mavens olika nivåer

Illustration över Mavens olika nivåer

Maven har tre inbyggda livscykler:

  • default (även kallad build) som hanterar deployment
  • clean som sköter rensning av projekt
  • site som hanterar projektdokumentering

Var och en av dessa cykler innehåller ett antal faser som representerar ett specifikt steg i cykeln. Exempelvis innehåller defaultcykeln fasen compile som ansvarar för kompilering av källkoden. Trots att varje fas har en specifik uppgift kan sättet den utför sin uppgift på variera då det är de mappade målen som i slutändan bestämmer vad som faktiskt sker. Vilka mål som knyts till vilken fas bestäms dels och framöverallt genom sättet artefakten paketerats men också genom de plugins som sugs in i projektet.

Som bilden ovan visar kan ett mål kan vara knutet till ett, flera eller inga faser precis som en fas kan innehålla noll eller flera mål. Ett fristående mål kan exekveras utanför livscykeln samtidigt som ett mål mappat mot flera faser körs en gång för varje mappning. Faser innehållandes multipla mål exekverar dessa i samma ordning som de deklarerats i POM:en. Däremot kommer en fas utan några mål aldrig att exekveras.

Defaultcyklen – för många användare den mest betydelsefulla cykeln då den fungerar som en generell modell för en applikations byggprocess – innehåller sammanlagt 23 faser. Nedan listar jag de mest framträdande av dessa:

Validate
Bekräftar att projektet är korrekt och att all information som behövs för att slutföra ett bygge finns tillgänligt.

Compilie
Komplilerar källkoden.

Test
Testar den kompilerade koden mot uppsatta tester.

Package
Paketerar den kompilerade koden till ett distribuerbart format (exempelvis .jar).

Integration-test
Om så är nödvändigt läggs den paketerade koden ut i en miljö anpassad för att köra integrationstester i.

Verify
Kör uppsatta kontroller för verifiering av paketets giltighet samt kontrollerar att paketet möter alla kvalitetskriterier.

Install
Installerar paketet i det lokala repot och kan nu användas som ett beroende i andra projekt lokalt.

Deploy
Kopierar det slutgiltiga paketet till ett remote repo för delning med andra projekt och utvecklare.

Utöver dessa faser tillkommer mellanfaser vilka bland annat hanterar förberedelser som att kopiera och flytta resurser till rätt kataloger samt post-process-steg som att städa upp efter körda tester. Här hittar ni den kompletta listan över faser.