Maven implementerer til Nexus

1. Oversigt

I en tidligere artikel diskuterede jeg, hvordan et Maven-projekt lokalt kan installere en tredjepartsburk, der endnu ikke er blevet implementeret på Maven Central (eller på nogen af ​​de andre store og offentligt hostede arkiver).

Denne løsning bør kun anvendes i små projekter, hvor installation, kørsel og vedligeholdelse af en fuld Nexus-server kan være for stor. Når et projekt vokser,

Nexus bliver hurtigt den eneste rigtige og modne mulighed for at være vært for tredjeparts artefakter såvel som til genbrug af interne artefakter på tværs af udviklingsstrømme.

Denne artikel viser, hvordan man implementerer artefakterne i et projekt til Nexus, med Maven.

2. Nexus-krav i pom.xml

For at Maven skal kunne implementere de artefakter, den skaber i pakke i byggefasen skal den definere lagerinformationen, hvor de pakkede artefakter skal implementeres, via distributionManagement element:

  nexus-snapshots // localhost: 8081 / nexus / content / repositories / snapshots 

En vært, offentlig Snapshots repository kommer ud af kassen på Nexus, så der er ingen grund til at oprette eller konfigurere noget yderligere. Nexus gør det nemt at bestemme URL'erne til dets hostede arkiver - hvert arkiv viser den nøjagtige post, der skal tilføjes i af projektet pom, under Resumé fanen.

3. Plugins

Som standard håndterer Maven implementeringsmekanismen via maven-deploy-plugin - dette kortlagt til implementering fase af standard Maven-livscyklus:

 maven-deploy-plugin 2.8.1 standard-deploy implementere implementere 

Det maven-deploy-plugin er en levedygtig mulighed for at håndtere opgaven med at implementere til artefakter af et projekt til Nexus, men det blev ikke bygget til at drage fuld fordel af, hvad Nexus har at tilbyde. På grund af den kendsgerning byggede Sonatype et Nexus-specifikt plugin - det nexus-staging-maven-plugin - der faktisk er designet til at drage fuld fordel af den mere avancerede funktionalitet, som Nexus har at tilbyde - funktionalitet såsom iscenesættelse.

Selvom vi til en simpel implementeringsproces ikke kræver iscenesættelsesfunktionalitet, vil vi gå videre med dette brugerdefinerede Nexus-plugin, da det blev bygget med det klare formål at tale godt med Nexus.

Den eneste grund til at bruge maven-deploy-plugin er at holde åbent for muligheden for at bruge et alternativ til Nexus i fremtiden - for eksempel et Artifactory-arkiv. I modsætning til andre komponenter, der rent faktisk kan ændre sig gennem et projekts livscyklus, er det meget usandsynligt, at Maven Repository Manager vil ændre sig, så fleksibilitet ikke er påkrævet.

Så det første trin i brugen af ​​et andet installationsplugin i implementeringsfasen er at deaktivere den eksisterende standardtilknytning:

 org.apache.maven.plugins maven-deploy-plugin $ {maven-deploy-plugin.version} sand 

Nu kan vi definere:

 org.sonatype.plugins nexus-staging-maven-plugin 1.5.1 standard-implementering implementere implementere nexus // localhost: 8081 / nexus / true 

Det indsætte målet med pluginet er kortlagt til indsætte fase af Maven-bygningen.

Bemærk også, at vi, som diskuteret, ikke har brug for iscenesættelsesfunktionalitet i en simpel implementering af -SNAPSHOT artefakter til Nexus, så det er fuldt deaktiveret via element.

Som standard inkluderer implementeringsmålet staging-workflowet, som anbefales til udgivelsesbygninger.

4. Det globale settings.xml

Implementering til Nexus er en sikret drift - og en implementering bruger eksisterer til dette formål ud af kassen i enhver Nexus-forekomst.

Konfiguration af Maven med legitimationsoplysningerne for dette implementering bruger, så det kan interagere korrekt med Nexus, kan ikke gøres i pom.xml af projektet. Dette skyldes, at syntaksen for pom tillader det ikke, for ikke at nævne det faktum, at pom kan være en offentlig artefakt, så den er ikke velegnet til at indeholde legitimationsoplysninger.

Serverens legitimationsoplysninger skal defineres i den globale Maven setting.xml:

  nexus-snapshots implementering_pass_for_deployment_user 

Serveren kan også konfigureres til at bruge nøglebaseret sikkerhed i stedet for rå og almindelig tekst.

5. Implementeringsprocessen

At udføre implementeringsprocessen er en enkel opgave:

mvn clean deploy -Dmaven.test.skip = true

Det er OK at springe over tests i forbindelse med et implementeringsjob, fordi dette job skal være det sidste job fra en implementeringsrørledning til projektet.

Et almindeligt eksempel på en sådan implementeringsrørledning ville være en række af Jenkins-job, der hver kun udløste den næste, hvis den blev gennemført med succes. Som sådan er det ansvaret for de tidligere job i rørledningen at køre alle testpakker fra projektet - på det tidspunkt, hvor installationsjobbet kører, skal alle tests allerede bestå.

Hvis du kørte en enkelt kommando, kan test holdes aktive for at køre før implementering fase udføres:

mvn ren implementering

6. Konklusion

Dette er en enkel, men alligevel meget effektiv løsning til implementering til Maven-artefakter til Nexus.

Det er også noget meningsfuldt - nexus-staging-maven-plugin bruges i stedet for standard maven-deploy-plugin; iscenesættelsesfunktionalitet er deaktiveret osv. - det er disse valg, der gør løsningen enkel og praktisk.

Potentiel aktivering af den fulde iscenesættelsesfunktionalitet kan være genstand for en fremtidig artikel.

Endelig diskuterer vi frigivelsesprocessen i den næste artikel.