Koristite najnoviju verziju ovisnosti u Mavenu

1. Pregled

Ručna nadogradnja Mavenovih ovisnosti uvijek je bila dosadan posao, posebno u projektima s puno knjižnica koje se često objavljuju.

U ovom uputstvu naučit ćemo kako iskoristiti dodatak Versions Maven kako bi naše ovisnosti bile ažurne.

Iznad svega, ovo može biti izuzetno korisno pri implementaciji cjevovoda za kontinuiranu integraciju koji automatski nadograđuju ovisnosti, ispituju da li sve i dalje radi ispravno i urezuju ili vraćaju rezultat, ovisno o tome što je prikladno.

2. Sintaksa raspona raspona inačica Maven

Još u Maven2 dana programeri su mogli odrediti raspone verzija unutar kojih bi se artefakti nadograđivali bez potrebe za ručnom intervencijom.

Ova sintaksa je i dalje valjana, koristi se u nekoliko projekata vani i stoga je vrijedna znanja:

Bez obzira na to, trebali bismo ga izbjegavati u korist dodatka za verzije Maven kad god je to moguće, jer unaprijeđenje konkretnih verzija izvana daje nam definitivno veću kontrolu nego dopuštanje Mavenu da sam rješava cijelu operaciju.

2.1. Zastarela sintaksa

Maven2 je također pružio dvije posebne vrijednosti metaverzije za postizanje rezultata: NAJNOVIJI i OSLOBOĐENJE.

NAJNOVIJI traži najnoviju moguću verziju, dok OSLOBOĐENJE ima za cilj najnoviju verziju koja nije SNAPSHOT.

Oni su, zaista, još uvijek apsolutno vrijedi za redovite ovisnosti razlučivost.

Međutim, ova stara metoda nadogradnje uzrokovala je nepredvidljivost tamo gdje je CI trebao ponovljivost. Stoga su zastarjeli zbog rješavanja ovisnosti dodataka.

3. Verzije dodatka Maven

Dodatak Versions Maven danas je de facto standardni način za upravljanje verzijama.

Od usporedbe na visokoj razini između udaljenih spremišta do zaključavanja vremenskih žigova na niskoj razini za verzije SNAPSHOT, njegov masivan popis ciljeva omogućuje nam da se pobrinemo za svaki aspekt naših projekata koji uključuju ovisnosti.

Iako su mnogi od njih izvan dosega ovog vodiča, pogledajmo pobliže one koji će nam pomoći u procesu nadogradnje.

3.1. Ispitni slučaj

Prije početka, definirajmo svoj testni slučaj:

  • tri izdanja s tvrdo kodiranom verzijom
  • jedno RELEASE s inačicom svojstva i
  • jedan SNAPSHOT
  commons-io commons-io 2.3 org.apache.commons commons-collection4 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 

Napokon, također izuzmimo artefakt iz postupka prilikom definiranja dodatka:

   org.codehaus.mojo inačice-maven-dodatak 2.7 org.apache.commons: commons-collection4 

4. Prikaz dostupnih ažuriranja

Kao prvo, kako bismo jednostavno znali možemo li i kako ažurirati svoj projekt, pravi alat za posao je inačice: ažuriranja ovisnosti o zaslonu:

mvn verzije: ažuriranja ovisnosti o zaslonu

Kao što vidimo, postupak je obuhvaćao svaku verziju RELEASE. Čak je uključivalo zajedničke zbirke4 budući da se izuzeće u konfiguraciji odnosi na postupak ažuriranja, a ne na postupak otkrivanja.

Suprotno tome, ignorirao je SNAPSHOT iz razloga što je to razvojna verzija koju često nije sigurno automatski ažurirati.

5. Ažuriranje ovisnosti

Pri prvom pokretanju ažuriranja dodatak stvara sigurnosnu kopiju pom.xml imenovan pom.xml.versionsBackup.

Iako će svaka iteracija izmijeniti pom.xml, datoteka sigurnosne kopije sačuvat će izvorno stanje projekta do trenutka kada se korisnik obveže (do mvn verzije: commit) ili vratiti (kroz mvn verzije: vratiti) cijeli postupak.

5.1. Pretvaranje SNAPSHOT-ova u RELEASE

Ponekad se dogodi da projekt uključuje SNAPSHOT (inačicu koja je još uvijek u ozbiljnoj izradi).

Možemo koristiti verzije: upotreba-izdanja kako bi provjerili je li objavljen dopisni RELEASE, a još više da istovremeno pretvorimo naš SNAPSHOT u to RELEASE:

mvn verzije: use-release 

5.2. Ažuriranje na Sljedeće RELEASE

Možemo prenijeti svaku ovisnost koja nije SNAPSHOT na najbližu verziju s verzije: use-next-release:

mvn verzije: use-next-release 

Jasno možemo vidjeti da je dodatak ažuriran zajedničko-io, commons-lang3, pa čak i zajednička dobra, koji više nije SNAPSHOT, do njihove sljedeće verzije.

Što je najvažnije, ignoriralo se commons-zbirke4, koji je izuzet u konfiguraciji dodatka, i zajednički-oblog, koji ima broj verzije koji se dinamički navodi kroz svojstvo.

5.3. Ažuriranje na Najnovije izdanje

Ažuriranje svake ovisnosti koja nije SNAPSHOT na svoje najnovije izdanje djeluje na isti način, jednostavno mijenjajući cilj u verzije: koristite najnovija izdanja:

mvn verzije: koristite najnovija izdanja 

6. Filtriranje neželjenih verzija

U slučaju da želimo zanemariti određene verzije, konfiguracija dodatka može se prilagoditi za dinamičko učitavanje pravila iz vanjske datoteke:

 org.codehaus.mojo inačice-maven-dodatak 2.7 //www.mycompany.com/maven-version-rules.xml 

Najvažnije od svega, također se može odnositi na lokalnu datoteku:

datoteka: ///home/andrea/maven-version-rules.xml 

6.1. Zanemarujući verzije globalno

Našu datoteku pravila možemo konfigurirati tako da ignorirat će verzije koje se podudaraju s određenim Regularnim izrazom:

  .*-beta 

6.2. Zanemarivanje verzija na temelju pravila

Konačno, u slučaju da su naše potrebe specifičnije, umjesto njih možemo izgraditi skup pravila:

    . * - OSLOBOĐENJE 2.1.0 

7. Zaključak

Vidjeli smo kako provjeriti i ažurirati ovisnosti projekta na siguran, automatski i u skladu s Maven3 načinom.

Kao i uvijek, izvorni kod dostupan je na GitHub-u, zajedno sa skriptom koja pomaže prikazati sve korak-po-korak i bez složenosti.

Da biste ga vidjeli na djelu, jednostavno preuzmite projekt i pokrenite u terminalu (ili u Git Bash-u ako koristite Windows):

./run-the-demo.sh