Utilizzo del plug-in di rilascio di Maven

È una best practice eccellente e ampiamente utilizzata contrassegnare ciascuna delle versioni stabili nel sistema di controllo delle versioni per riferimento futuro. Tuttavia, questo tipo di contabilità è noioso e soggetto a errori nel migliore dei casi. Come molte attività noiose e soggette a errori, è una di quelle cose che potrebbero essere eseguite con un po 'di automazione. Fortunatamente, Maven può aiutare. Il

Plugin di rilascio Maven

ti aiuta ad automatizzare l'intero processo di aggiornamento del numero di versione POM e contrassegnare una versione di rilascio nel tuo sistema di controllo della versione. Vediamo come funziona. Ecco un estratto da un file POM, che mostra il numero di versione che identifica in modo univoco questa versione:

  ... com.wakaleo.myapp myapp-core jar 1.0.1-SNAPSHOT ... 

Il suffisso SNAPSHOT significa che ogni volta che distribuisco questa versione, verrà distribuito un nuovo snapshot nel mio repository Maven. Chiunque desideri utilizzare la versione SNAPSHOT più recente e all'avanguardia può aggiungere una dipendenza SNAPSHOT nel proprio progetto. Di solito sarei io o altri membri del team di sviluppo. Le istantanee, per definizione, tendono ad essere bestie abbastanza instabili.

  com.wakaleo.myapp myapp-core 1.0.1-SNAPSHOT  

Come nota a margine, gli impavidi e gli spericolati possono fare un ulteriore passo avanti utilizzando sempre la versione PIÙ RECENTE, indipendentemente dal suo numero di versione effettivo e indipendentemente dal fatto che si tratti di una versione ufficiale o solo di un'istantanea:

  com.wakaleo.myapp myapp-core LATEST  

Quando la versione 1.0.1 è pronta, è necessario aggiornare il file POM, eseguire il commit del nuovo file POM nel controllo della versione, contrassegnare questa versione come una versione e quindi passare a lavorare sulla versione 1.0.2. Il plug-in Maven Release può automatizzare gran parte di questo processo. Tuttavia, prima che il plug-in Maven Release possa fare la sua magia, devi assicurarti di avere tutto ciò di cui ha bisogno nel tuo file POM.

Prima di tutto, devi lavorare con una versione SNAPSHOT. Tuttavia, quando sei pronto per rilasciare la tua nuova versione, dovresti rimuovere tutti i riferimenti agli snapshot nelle tue dipendenze. Questo perché una versione deve essere stabile e una build che utilizza snapshot non è, per definizione, sempre riproducibile.

La prossima cosa di cui hai bisogno è un file

block, in modo che possa trovare dove creare un nuovo tag di rilascio e confermare le modifiche. Ecco un esempio del mondo reale:
  scm:svn://wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/tr... scm:svn://wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/tr... //wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/tr...  

Successivamente, è necessario configurare il plug-in di rilascio stesso. Ciò implica principalmente dire a Maven dove vanno i tag di rilascio, tramite l'elemento di configurazione "tagBase". Se stai usando la convenzione trunk / tag / branch di Subversion, Maven inserirà automaticamente i tag di rilascio nella directory "tags". Nell'esempio seguente, utilizziamo una leggera variazione della normale convenzione e inseriamo le versioni nella directory "tag / releases":

  ...  ...   org.apache.maven.plugins maven-release-plugin  //wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/ta...    ...  ...  

Ora puoi metterti al lavoro e provare una versione (semi) automatizzata. La prima cosa che devi fare è assicurarti che tutte le tue ultime modifiche siano state applicate (nel nostro caso) a Subversion. Se sono presenti modifiche in sospeso, Maven non ti consentirà di eseguire una versione. Prima di tutto, devi preparare il rilascio, utilizzando l'obiettivo "prepara":

 $ mvn release:prepare 

Questo obiettivo ti farà una serie di domande per confermare quale numero di versione desideri rilasciare, quale nuovo numero di versione snapshot desideri utilizzare e dove desideri posizionare il tag di rilascio. Se hai impostato correttamente il tuo file POM, questi avranno dei valori predefiniti ragionevoli e non dovrai pensare molto. In effetti, puoi anche disabilitare completamente queste domande usando l'opzione della riga di comando "--batch-mode".

Se vuoi sapere esattamente cosa farà Maven al tuo file POM e al tuo SCM in anticipo (generalmente una buona idea), puoi eseguire l'operazione in modalità "dry-run", come mostrato qui:

 $ mvn release:prepare -DdryRun=true 

Questo utile trucco simula le operazioni SCM (scrivendole sulla console) e crea due file pom di esempio che puoi consultare: pom.xml.tag, che è il file pom che verrà inserito in Subversion e taggato, e pom .xml.next, che contiene il numero di versione dello snapshot successivo. Una volta che sei soddisfatto di ciò che Maven farà, puoi fare la cosa reale:

 $ mvn release:clean release:prepare 

L'obiettivo "preparare" in realtà fa parecchio. In effetti,:

  • Assicurati che non ci siano modifiche non salvate o dipendenze SNAPSHOT (vedi sopra)
  • Aggiorna il numero di versione di SNAPSHOT a una versione di rilascio (ad es. Passando da "1.0.1-SNAPSHOT" a "1.0.1")
  • Aggiorna la sezione SCM del file POM in modo che punti al tag di rilascio piuttosto che al trunk nel repository Subversion
  • Esegui tutti i test dell'applicazione per assicurarti che tutto funzioni ancora
  • Salvare le modifiche apportate al file POM
  • Crea un nuovo tag in Subversion per questa versione
  • Aggiorna il numero di versione SNAPSHOT a una nuova versione SNAPSHOT (ad es. Passando da "1.0.1" a "1.0.2-SNAPSHOT")
  • Salvare le modifiche apportate al file POM

Una volta che hai finito, hai la tua versione di rilascio taggata in Subversion e stai lavorando a una nuova versione SNAPSHOT.

Ma aspetta, un minuto, potresti dire. Non ci siamo dimenticati di distribuire la nostra versione da qualche parte? Ecco perché l'obiettivo si chiama "preparare". Abbiamo impostato tutto solo in preparazione per l'uscita, in realtà non abbiamo ancora rilasciato nulla. Ma non preoccuparti, anche l'esecuzione del rilascio è piuttosto semplice. Usa semplicemente "mvn release: perform":

 $ mvn release:perform 

Questo farà effettivamente un "deploy mvn" con la versione che abbiamo appena creato. Più precisamente, utilizzerà il file release.properties generato dall'obiettivo "release: prepare" per fare quanto segue:

  • Controlla la versione che abbiamo appena taggato
  • Costruisci l'applicazione (compilazione, test e pacchettizzazione)
  • Distribuisci la versione di rilascio nei repository locali e remoti

Naturalmente, entrambi questi passaggi sono molto facili da posizionare su un server Hudson, in modo che possano essere eseguiti centralmente. > Tutto sommato, un modo molto conveniente per automatizzare il processo di rilascio.

"Il miglior corso di sviluppo che ho seguito da molto tempo ... Mi è piaciuto molto il corso ... Un corso" imperdibile "per sviluppatori Java seri ..." - Leggi cosa dicono le persone sui Bootcamp di Java Power Tools.

Questa storia, "Using the Maven Release Plugin" è stata originariamente pubblicata da JavaWorld.