Maven Distribuisci su Nexus

1. Panoramica

In un articolo precedente, ho discusso di come un progetto Maven può installare localmente un jar di terze parti che non è stato ancora distribuito su Maven Central (o su uno qualsiasi degli altri repository di grandi dimensioni e ospitati pubblicamente).

Questa soluzione dovrebbe essere applicata solo in piccoli progetti in cui l'installazione, l'esecuzione e la manutenzione di un server Nexus completo potrebbero essere eccessive. Tuttavia, man mano che un progetto cresce,

Nexus diventa rapidamente l'unica opzione reale e matura per l'hosting di artefatti di terze parti, nonché per il riutilizzo di artefatti interni nei flussi di sviluppo.

Questo articolo mostrerà come distribuire gli artefatti di un progetto su Nexus, con Maven .

2. Requisiti Nexus nel pom.xml

Affinché Maven possa distribuire gli artefatti che crea nella fase di pacchetto della build, deve definire le informazioni del repository in cui verranno distribuiti gli artefatti pacchettizzati, tramite l' elemento distributionManagement :

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

Un repository Snapshot pubblico ospitato viene fornito immediatamente su Nexus, quindi non è necessario creare o configurare ulteriori informazioni. Nexus semplifica la determinazione degli URL dei suoi repository ospitati: ogni repository mostra la voce esatta da aggiungere neldel progetto pom, nella scheda Riepilogo .

3. Plugin

Per impostazione predefinita, Maven gestisce il meccanismo di distribuzione tramite il plug-in maven-deploy- questo mappato alla fase di distribuzione del ciclo di vita di Maven predefinito:

 maven-deploy-plugin 2.8.1 default-deploy deploy deploy 

Il plug-in di maven-deploy è un'opzione praticabile per gestire l'attività di distribuzione di artefatti di un progetto su Nexus, ma non è stato creato per sfruttare appieno ciò che Nexus ha da offrire. Per questo motivo, Sonatype ha creato un plug-in specifico per Nexus - il plug -in nexus-staging-maven- che è in realtà progettato per sfruttare appieno le funzionalità più avanzate che Nexus ha da offrire - funzionalità come lo staging.

Sebbene per un semplice processo di distribuzione non sia necessaria la funzionalità di gestione temporanea, procederemo con questo plug-in Nexus personalizzato poiché è stato creato con il chiaro scopo di parlare bene con Nexus.

L'unico motivo per utilizzare il plug-in di maven-deploy è quello di mantenere aperta l'opzione di utilizzare un'alternativa a Nexus in futuro, ad esempio un repository Artifactory. Tuttavia, a differenza di altri componenti che possono effettivamente cambiare durante il ciclo di vita di un progetto, è altamente improbabile che Maven Repository Manager cambi, quindi non è richiesta flessibilità.

Quindi, il primo passaggio nell'utilizzo di un altro plug-in di distribuzione nella fase di distribuzione è disabilitare la mappatura predefinita esistente:

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

Ora possiamo definire:

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

L' obiettivo di distribuzione del plug-in è mappato alla fase di distribuzione della build Maven.

Si noti inoltre che, come discusso, non è necessaria la funzionalità di gestione temporanea in una semplice distribuzione di artefatti -SNAPSHOT su Nexus, in modo che sia completamente disabilitata tramite il elemento.

Per impostazione predefinita, l'obiettivo di distribuzione include il flusso di lavoro di gestione temporanea, consigliato per le build di rilascio.

4. Il file Global settings.xml

L'implementazione su Nexus è un'operazione protetta e un utente di distribuzione esiste per questo scopo immediatamente su qualsiasi istanza Nexus.

La configurazione di Maven con le credenziali di questo utente di distribuzione , in modo che possa interagire correttamente con Nexus, non può essere eseguita nel pom.xml del progetto. Questo perché la sintassi del pom non lo consente, per non parlare del fatto che il pom potrebbe essere un artefatto pubblico, quindi non adatto a contenere informazioni sulle credenziali.

Le credenziali del server devono essere definite nel Maven setting.xml globale :

 nexus-snapshots deployment the_pass_for_the_deployment_user 

Il server può anche essere configurato per utilizzare la sicurezza basata su chiave invece di credenziali non elaborate e in chiaro.

5. Il processo di distribuzione

L'esecuzione del processo di distribuzione è un'attività semplice:

mvn clean deploy -Dmaven.test.skip=true

Saltare i test va bene nel contesto di un lavoro di distribuzione perché questo lavoro dovrebbe essere l'ultimo lavoro da una pipeline di distribuzione per il progetto.

Un esempio comune di tale pipeline di distribuzione sarebbe una successione di lavori Jenkins, ciascuno dei quali attiva il successivo solo se viene completato correttamente. In quanto tale, è responsabilità dei lavori precedenti nella pipeline eseguire tutte le suite di test dal progetto: quando viene eseguito il lavoro di distribuzione, tutti i test dovrebbero già essere superati.

Se viene eseguito un singolo comando, i test possono essere mantenuti attivi per essere eseguiti prima dell'esecuzione della fase di distribuzione :

mvn clean deploy

6. Conclusione

Questa è una soluzione semplice ma molto efficace per la distribuzione di artefatti Maven su Nexus.

È anche un po 'supponente: il plug-in nexus-staging-maven viene utilizzato al posto del plug-in di default maven-deploy ; la funzionalità di staging è disabilitata, ecc. Sono queste scelte che rendono la soluzione semplice e pratica.

Potenzialmente l'attivazione della funzionalità di staging completa può essere oggetto di un articolo futuro.

Infine, discuteremo del processo di rilascio nel prossimo articolo.