Maven implementeren op Nexus

1. Overzicht

In een vorig artikel heb ik besproken hoe een Maven-project lokaal een pot van een derde partij kan installeren die nog niet is geïmplementeerd op Maven Central (of op een van de andere grote en openbaar gehoste opslagplaatsen).

Die oplossing mag alleen worden toegepast in kleine projecten waar het installeren, draaien en onderhouden van een volledige Nexus-server overbodig kan zijn. Naarmate een project groeit,

Nexus wordt al snel de enige echte en volwassen optie voor het hosten van artefacten van derden, evenals voor het hergebruiken van interne artefacten in ontwikkelingsstromen.

In dit artikel wordt uitgelegd hoe u de artefacten van een project implementeert naar Nexus, met Maven.

2. Nexus-vereisten in het pom.xml

Om ervoor te zorgen dat Maven de artefacten die het creëert in het pakket fase van de build, moet het de repository-informatie definiëren waar de verpakte artefacten zullen worden geïmplementeerd, via de distributiebeheer element:

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

Een gehost, openbaar Momentopnamen repository komt uit de doos op Nexus, dus het is niet nodig om verder iets te maken of te configureren. Nexus maakt het gemakkelijk om de URL's van de gehoste opslagplaatsen te bepalen - elke opslagplaats geeft het exacte item weer dat moet worden toegevoegd aan de van het project pom, onder de Samenvatting tabblad.

3. Plug-ins

Standaard verwerkt Maven het implementatiemechanisme via de maven-deploy-plugin - dit is toegewezen aan de inzet fase van de standaard Maven-levenscyclus:

 maven-deploy-plugin 2.8.1 standaard-deploy deploy deploy 

De maven-deploy-plugin is een haalbare optie om de taak uit te voeren om artefacten van een project naar Nexus te implementeren, maar het is niet gebouwd om ten volle te profiteren van wat Nexus te bieden heeft. Vanwege dat feit heeft Sonatype een Nexus-specifieke plug-in gebouwd - de nexus-staging-maven-plugin - die eigenlijk is ontworpen om optimaal te profiteren van de meer geavanceerde functionaliteit die Nexus te bieden heeft - functionaliteit zoals enscenering.

Hoewel we voor een eenvoudig implementatieproces geen staging-functionaliteit nodig hebben, gaan we verder met deze aangepaste Nexus-plug-in, omdat deze is gebouwd met het duidelijke doel om goed met Nexus te praten.

De enige reden om de maven-deploy-plugin is om de mogelijkheid open te houden om in de toekomst een alternatief voor Nexus te gebruiken - bijvoorbeeld een Artifactory-repository. In tegenstelling tot andere componenten die tijdens de levenscyclus van een project daadwerkelijk kunnen veranderen, is het zeer onwaarschijnlijk dat de Maven Repository Manager verandert, zodat flexibiliteit niet vereist is.

Dus de eerste stap bij het gebruik van een andere implementatie-plug-in in de implementatiefase is het uitschakelen van de bestaande, standaardtoewijzing:

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

Nu kunnen we definiëren:

 org.sonatype.plugins nexus-staging-maven-plugin 1.5.1 standaard-deploy deploy deploy nexus // localhost: 8081 / nexus / true 

De inzetten doel van de plug-in is toegewezen aan de inzetten fase van de Maven-build.

Merk ook op dat, zoals besproken, we geen staging-functionaliteit nodig hebben bij een eenvoudige implementatie van -MOMENTOPNAME artefacten naar Nexus, dus die is volledig uitgeschakeld via de element.

Standaard omvat het implementatiedoel de staging-werkstroom, die wordt aanbevolen voor release-builds.

4. Het globale settings.xml

Implementatie op Nexus is een beveiligde werking - en een inzet gebruiker bestaat voor dit doel uit de doos op elke Nexus-instantie.

Maven configureren met de inloggegevens hiervan inzet gebruiker, zodat het correct kan communiceren met Nexus, kan niet worden gedaan in het pom.xml van het project. Dit komt doordat de syntaxis van de pom staat het niet toe, om nog maar te zwijgen van het feit dat de pom kan een openbaar artefact zijn, dus niet geschikt om referentie-informatie vast te houden.

De referenties van de server moeten worden gedefinieerd in de algemene Maven setting.xml:

  nexus-snapshots implementatie the_pass_for_the_deployment_user 

De server kan ook worden geconfigureerd om op sleutel gebaseerde beveiliging te gebruiken in plaats van onbewerkte en leesbare referenties.

5. Het implementatieproces

Het implementatieproces uitvoeren is een eenvoudige taak:

mvn clean deploy -Dmaven.test.skip = true

Het overslaan van tests is OK in de context van een implementatietaak omdat deze taak de laatste taak van een implementatie pijplijn voor het project.

Een bekend voorbeeld van een dergelijke implementatiepijplijn is een opeenvolging van Jenkins-taken, die elk de volgende activeren als deze met succes worden voltooid. Als zodanig is het de verantwoordelijkheid van de vorige taken in de pijplijn om alle testsuites van het project uit te voeren - tegen de tijd dat de implementatietaak wordt uitgevoerd, zouden alle tests al moeten slagen.

Als er een enkele opdracht is uitgevoerd, kunnen tests actief worden gehouden voordat de inzet fase voert uit:

mvn schoon implementeren

6. Conclusie

Dit is een eenvoudige, maar zeer effectieve oplossing voor het implementeren van Maven-artefacten op Nexus.

Het is ook een beetje eigenwijs - nexus-staging-maven-plugin wordt gebruikt in plaats van de standaard maven-deploy-plugin; ensceneringsfunctionaliteit is uitgeschakeld, enz. Het zijn deze keuzes die de oplossing eenvoudig en praktisch maken.

Het potentieel activeren van de volledige staging-functionaliteit kan het onderwerp zijn van een toekomstig artikel.

Ten slotte bespreken we het vrijgaveproces in het volgende artikel.