Použite najnovšiu verziu závislosti v programe Maven

1. Prehľad

Manuálna aktualizácia závislostí Maven bola vždy namáhavá práca, najmä v projektoch, kde sa často uvoľňuje veľa knižníc.

V tejto príručke sa naučíme ako využiť doplnok Versions Maven na udržanie aktuálnosti našich závislostí.

To môže byť predovšetkým mimoriadne užitočné pri implementácii potrubí kontinuálnej integrácie, ktoré automaticky upgradujú závislosti, testujú, či všetko stále funguje správne, a potvrdzujú alebo odvolávajú výsledok, podľa toho, čo je vhodné.

2. Syntax rozsahu verzií Maven

Už v dňoch Maven2 mohli vývojári určiť rozsahy verzií, v ktorých by sa artefakty upgradovali bez potreby manuálneho zásahu.

Táto syntax je stále platná, používa sa v niekoľkých projektoch a preto stojí za to vedieť:

Pokiaľ je to možné, mali by sme sa mu vyhnúť v prospech doplnku Versions Maven, pretože postupujúce konkrétne verzie zvonku nám dávajú rozhodne väčšiu kontrolu ako to, že necháme Maven celú operáciu zvládnuť sám.

2.1. Zastaraná syntax

Maven2 tiež poskytol dve špeciálne hodnoty metaverzie na dosiahnutie výsledku: POSLEDNÉ a UVOĽNENIE.

POSLEDNÉ hľadá najnovšiu možnú verziu, zatiaľ čo UVOĽNENIE zameriava sa na najnovšiu verziu, ktorá nie je SNAPSHOT.

Skutočne sú stále platí pre pravidelné závislosti rozhodnutie.

Táto stará metóda aktualizácie však spôsobovala nepredvídateľnosť tam, kde CI potrebovala reprodukovateľnosť. Z tohto dôvodu im bola ukončená podpora pre rozlíšenie závislostí doplnkov.

3. Verzie Maven Plugin

Plugin Versions Maven je v súčasnosti štandardným spôsobom riešenia správy verzií.

Od porovnania na vysokej úrovni medzi vzdialenými úložiskami až po uzamykanie časových značiek na nízkej úrovni pre verzie SNAPSHOT - jeho rozsiahly zoznam cieľov nám umožňuje postarať sa o všetky aspekty našich projektov, ktoré zahŕňajú závislosti.

Aj keď mnohé z nich sú mimo rozsahu tohto tutoriálu, poďme sa bližšie pozrieť na tie, ktoré nám pomôžu v procese inovácie.

3.1. Testovací prípad

Pred začatím definujme náš testovací prípad:

  • tri SPRÁVY s pevne zakódovanou verziou
  • jedno RELEASE s verziou vlastnosti a
  • jeden SNAPSHOT
  commons-io commons-io 2.3 org.apache.commons commons-collections4 4.0 org.apache.commons commons-lang3 3.0 org.apache.commons commons-compress $ {commons-compress-version} commons-beanutils commons-beanutils 1.9.1 -SNAPSHOT 1.15 

Na záver vylúčime artefakt z procesu pri definovaní doplnku:

   org.codehaus.mojo versions-maven-plugin 2.7 org.apache.commons: commons-collections4 

4. Zobrazenie dostupných aktualizácií

Po prvé, jednoducho vedieť, či a ako môžeme aktualizovať náš projekt, je tým správnym nástrojom verzie: display-dependency-updates:

verzie mvn: aktualizácie závislostí zobrazenia

Ako vidíme, proces zahŕňal všetky verzie RELEASE. Dokonca to obsahovalo spoločné zbierky4 pretože vylúčenie v konfigurácii sa týka procesu aktualizácie, a nie procesu zisťovania.

Naproti tomu ignoroval SNAPSHOT z dôvodu, že ide o vývojovú verziu, ktorú často nie je bezpečné automaticky aktualizovať.

5. Aktualizácia závislostí

Pri prvom spustení aktualizácie vytvorí doplnok zálohu súboru pom.xml menovaný pom.xml.versionsZálohovanie.

Zatiaľ čo každá iterácia zmení pom.xml, záložný súbor zachová pôvodný stav projektu až do okamihu, keď sa užívateľ zaviaže (cez verzie mvn: potvrdiť) alebo vrátiť späť (prostredníctvom verzie mvn: vrátiť sa) celý proces.

5.1. Prevod SNAPSHOTOV na RELEASE

Stáva sa niekedy, že projekt obsahuje SNAPSHOT (verzia, ktorá je stále v ťažkom vývoji).

Môžeme použiť verzie: použitia-vydania aby sme skontrolovali, či bolo zverejnené korešpondenčné RELEASE, a ešte viac, aby sme súčasne premenili náš SNAPSHOT na toto RELEASE:

verzie mvn: použitia-vydania 

5.2. Aktualizácia na ďalšie VYDANIE

Každú závislosť, ktorá nie je SNAPSHOT, môžeme preniesť do jej najbližšej verzie s verzie: use-next-releases:

verzie mvn: use-next-releases 

Vidíme jasne, že doplnok bol aktualizovaný commons-io, commons-lang3, a dokonca commons-beanutils, ktorý už nie je SNAPSHOT, na ich ďalšiu verziu.

Najdôležitejšie je, že sa to ignorovalo commons-zbierky4, ktorý je vylúčený v konfigurácii pluginu, a commons-compress, ktorá má číslo verzie zadané dynamicky prostredníctvom vlastnosti.

5.3. Aktualizácia na najnovšie RELEASE

Aktualizácia všetkých závislostí od iných ako SNAPSHOT až po ich najnovšie vydanie funguje rovnakým spôsobom, jednoducho zmení cieľ na verzie: use-latest-releases:

verzie mvn: use-latest-releases 

6. Filtrovanie nežiaducich verzií

V prípade, že chceme ignorovať určité verzie, je možné vyladiť konfiguráciu pluginu na dynamické načítanie pravidiel z externého súboru:

 org.codehaus.mojo versions-maven-plugin 2.7 //www.mycompany.com/maven-version-rules.xml 

Najpozoruhodnejšie, môže tiež odkazovať na lokálny súbor:

súbor: ///home/andrea/maven-version-rules.xml 

6.1. Globálne ignorovanie verzií

Môžeme nakonfigurovať náš súbor pravidiel tak bude ignorovať verzie zodpovedajúce konkrétnemu regulárnemu výrazu:

  . * - beta 

6.2. Ignorovanie verzií na základe pravidla

Nakoniec, v prípade, že sú naše potreby konkrétnejšie, môžeme namiesto toho vytvoriť súbor pravidiel:

    . * - VYDANIE 2.1.0 

7. Záver

Už sme videli, ako skontrolovať a aktualizovať závislosti projektu bezpečným, automatickým a Maven3 kompatibilným spôsobom.

Ako vždy, zdrojový kód je k dispozícii na GitHub spolu so skriptom, ktorý pomáha predviesť všetko krok za krokom a bez zložitosti.

Ak ho chcete vidieť v akcii, jednoducho si stiahnite projekt a spustite ho v termináli (alebo v systéme Git Bash, ak používate Windows):

./run-the-demo.sh

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