Maven distribuerer til Nexus

1. Oversikt

I en forrige artikkel diskuterte jeg hvordan et Maven-prosjekt lokalt kan installere en tredjepartsburk som ennå ikke er distribuert på Maven Central (eller på noen av de andre store og offentlig lagrede repositoriene).

Denne løsningen skal bare brukes i små prosjekter der installasjon, kjøring og vedlikehold av en full Nexus-server kan være overkill. Når et prosjekt vokser,

Nexus blir raskt det eneste virkelige og modne alternativet for hosting av tredjeparts gjenstander, samt for gjenbruk av interne gjenstander på tvers av utviklingsstrømmer.

Denne artikkelen viser hvordan du distribuerer gjenstandene til et prosjekt til Nexus, med Maven.

2. Nexus Krav i pom.xml

For at Maven skal kunne distribuere gjenstandene den skaper i pakke i byggfasen, må den definere depotinformasjonen der de pakkede gjenstandene skal distribueres, via distributionManagement element:

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

En vert, offentlig Øyeblikksbilder repository kommer ut av boksen på Nexus, så det er ikke nødvendig å opprette eller konfigurere noe videre. Nexus gjør det enkelt å bestemme nettadressene til de lagrede lagringsplassene - hvert lager viser den nøyaktige oppføringen som skal legges til i av prosjektet pom, under Sammendrag fanen.

3. Plugins

Som standard håndterer Maven distribusjonsmekanismen via maven-deploy-plugin - dette kartlagt til utplassering fase av standard Maven-livssyklus:

 maven-deploy-plugin 2.8.1 standard-deploy distribuere distribuere 

De maven-deploy-plugin er et levedyktig alternativ for å håndtere oppgaven med å distribuere til gjenstander av et prosjekt til Nexus, men det ble ikke bygget for å dra full nytte av det Nexus har å tilby. På grunn av det faktum bygde Sonatype et Nexus-spesifikt plugin - nexus-staging-maven-plugin - som faktisk er designet for å dra full nytte av den mer avanserte funksjonaliteten som Nexus har å tilby - funksjonalitet som iscenesettelse.

Selv om vi ikke krever iscenesettingsfunksjonalitet for en enkel distribusjonsprosess, vil vi gå videre med dette tilpassede Nexus-pluginet siden det ble bygget med det klare formålet å snakke med Nexus godt.

Den eneste grunnen til å bruke maven-deploy-plugin er å holde åpent muligheten for å bruke et alternativ til Nexus i fremtiden - for eksempel et Artifactory repository. Imidlertid, i motsetning til andre komponenter som faktisk kan endres gjennom hele prosjektets livssyklus, er det svært lite sannsynlig at Maven Repository Manager endres, slik at fleksibilitet ikke er nødvendig.

Så det første trinnet i å bruke en annen distribusjonsplugg i distribusjonsfasen er å deaktivere den eksisterende standardkartleggingen:

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

Nå kan vi definere:

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

De utplassere plugin-målet er kartlagt til utplassere fase av Maven-bygningen.

Legg også merke til at, som diskutert, trenger vi ikke iscenesettingsfunksjonalitet i en enkel distribusjon av -SNAPSHOT gjenstander til Nexus, slik at den er fullstendig deaktivert via element.

Som standard inkluderer distribusjonsmålet staging-arbeidsflyten, som anbefales for utgivelsesbygger.

4. Det globale settings.xml

Implementering til Nexus er en sikret drift - og en utplassering bruker eksisterer for dette formålet ut av esken i alle Nexus-forekomster.

Konfigurere Maven med legitimasjonen til dette utplassering brukeren, slik at den kan samhandle riktig med Nexus, kan ikke gjøres i pom.xml av prosjektet. Dette er fordi syntaksen til pom tillater det ikke, for ikke å nevne det faktum at pom kan være en offentlig gjenstand, så ikke egnet til å inneholde legitimasjonsinformasjon.

Påloggingsinformasjonen til serveren må defineres i den globale Maven setting.xml:

  nexus-snapshots distribusjon_pass_for_deployment_user 

Serveren kan også konfigureres til å bruke nøkkelbasert sikkerhet i stedet for legitimasjon for rå og ren tekst.

5. Distribusjonsprosessen

Å utføre distribusjonsprosessen er en enkel oppgave:

mvn clean deploy -Dmaven.test.skip = true

Hopp over tester er OK i sammenheng med en distribusjonsjobb fordi denne jobben skal være den siste jobben fra en distribusjonsrørledning for prosjektet.

Et vanlig eksempel på en slik distribusjonsrørledning vil være en rekke Jenkins-jobber, hver utløser den neste bare hvis den fullføres. Som sådan er det ansvaret for de tidligere jobbene i rørledningen å kjøre alle testpakker fra prosjektet - når distribusjonsjobben kjører, bør alle testene allerede bestå.

Hvis du kjørte en enkelt kommando, kan tester holdes aktive for å kjøre før utplassering fase utfører:

mvn ren distribusjon

6. Konklusjon

Dette er en enkel, men likevel svært effektiv løsning for distribusjon til Maven-gjenstander til Nexus.

Det er også noe meningsfylt - nexus-staging-maven-plugin brukes i stedet for standard maven-deploy-plugin; iscenesettingsfunksjonalitet er deaktivert osv. - det er disse valgene som gjør løsningen enkel og praktisk.

Potensiell aktivering av full iscenesettingsfunksjonalitet kan være gjenstand for en fremtidig artikkel.

Til slutt vil vi diskutere utgivelsesprosessen i neste artikkel.


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