Iskustvo korištenja flatten-maven-plugin-a da pojednostavite verzioniranje u maven projektima

О нас

U 1C razvijamo ne samo platformu 1C: Enterprise na C ++ и JavaScript, ali i Java aplikacije – posebno novo razvojno okruženje Alati za razvoj preduzeća baziran na Eclipse-u i messenger serveru koji je duboko integriran sa platformom - Interakcioni sistemi.

ulazak

Maven najčešće koristimo kao build sistem za Java aplikacije, a u ovom kratkom članku želimo govoriti o jednom od problema sa kojima smo se morali suočiti u procesu organizacije razvoja, te o pristupu koji nam je omogućio da to prevaziđemo. problem.

Preduslovi i tok rada

Zbog specifičnosti razvoja u našim maven projektima, koristimo dosta modula, zavisnosti i podređenih projekata. Broj pom fajlova u jednom stablu može biti u desetinama ili čak stotinama.

Iskustvo korištenja flatten-maven-plugin-a da pojednostavite verzioniranje u maven projektima

Činilo bi se: ništa strašno, jednom su ga stvorili i zaboravili. Ako trebate promijeniti ili dodati nešto u svim datotekama odjednom, postoji mnogo zgodnih alata u uređivačima i IDE-ovima. Koja je najčešća redovna promjena pom.xml? Vjerujemo da su promjene u verzijama projekta i ovisnostima. Možda će neko hteti da se s tim i polemiše, ali kod nas je upravo takva situacija. Razlog leži u činjenici da, zajedno sa kernelom, istovremeno razvijamo mnoge sopstvene biblioteke, a za stalnu ponovljivost rezultata izgradnje i testiranja, upotreba snimaka nam se ne čini prikladnim pristupom. Iz tog razloga, potrebno je povećati broj verzije u projektima sa svakom izgradnjom.

Također, s vremena na vrijeme, programer treba da napravi sopstvenu granu biblioteke i proveri njenu funkcionalnost u odnosu na sve zavisnosti, za šta mora ručno da promeni verziju svih njih.

Početno rješenje

Sa tako čestim i višestrukim promjenama verzija, želim pojednostaviti i automatizirati proces unutar CI. Ovdje u pomoć dolazi zgodan, dobro poznati dodatak. versions-maven-plugin - povežite ga i pokrenite

mvn -N verzije: set -DnewVersion=2.0.1

a Maven će učiniti sve kako treba: proći će kroz hijerarhiju od vrha do dna, zamjenjujući sve verzije - ljepota! Sada ostaje samo da podnesete zahtjev za povlačenjem, kolege će pregledati promjene i možete se brzo pridružiti prtljažniku. Brzo? Bez obzira kako je. Par stotina pom.xml na pregled, a to se ne računa kod. Osim toga, niko nije siguran od sukoba spajanja s tako velikim brojem promijenjenih datoteka. Ovdje treba napomenuti da se u CI procesu promjene verzije dešavaju automatski zajedno sa promjenama u funkcionalnosti, a ne nekako odvojeno.

Nove karakteristike

Neko vrijeme smo se smirili i rezignirani živjeli smo tako do momaka iz Maven Apache projekat Počevši od verzije 3.5.0-beta-1, Maven nije uključivao podršku za takozvane “placeholders”. Suština ovih zamjena je u tome pom.xml umjesto specifične indikacije verzije projekta, koriste se varijable ${revision}, ${sha1} и ${changelist}. Vrijednosti samih ovih svojstava postavljene su ili u elementusvojstva>, ili se mogu definirati kroz sistemsko svojstvo

mvn -Drevision=2.0.0 čisti paket

Vrijednosti sistemskih svojstava imaju prednost nad vrijednostima definiranim usvojstva>.

Roditelj

  4.0.0
  
    org.apache
    apache
    18
  
  org.apache.maven.ci
  ci-parent
  First CI Friendly
  ${revision}${sha1}${changelist}
  ...
  
    1.3.1
    -SNAPSHOT
    
  


Potomak

  4.0.0
  
    org.apache.maven.ci
    ci-parent
    ${revision}${sha1}${changelist}
  
  org.apache.maven.ci
  ci-dijete
   ...

Ako želite da napravite verziju 2.0.0-SNAPSHOT, samo koristite

    mvn -Drevision=2.0.0 čisti paket

Ako želite da objavite, samo resetujte SNAPSHOT

    mvn -Dchangelist= čisti paket

*Gore navedeni primjeri su preuzeti iz članci na web stranici projekta Maven Apache

Oštra realnost

Sve je dobro i zdravo, vreme je da osetite zadovoljstvo, ali ne. Ispostavilo se da ova metoda neće raditi za instalaciju i implementaciju, jer neće biti zamijenjena u opisima artefakata objavljenih u spremištu ${revision} na njegovo značenje i maven više neće razumjeti o čemu se radi.


    org.apache
    apache
    ${revision}

Svetlo na kraju tunela

Moramo tražiti rješenje problema. Mogao je spasiti situaciju flatten-maven-plugin. Ovaj dodatak rješava sve varijable u pom-u, ali u isto vrijeme izrezuje mnogo drugih informacija koje su potrebne samo tokom asemblera i nisu potrebne prilikom uvoza objavljenih artefakata u druge projekte. Dodatak također "izravnava" sve ovisnosti roditelj-dijete, a kao rezultat, dobijate ravni pom koji uključuje sve što vam je potrebno. Neugodnost je bila u tome što izrezuje previše “ekstra”, što nam nikako nije odgovaralo. Nakon proučavanja informacija o razvoju ovog dodatka, pokazalo se da nismo jedini u svemiru, a još u kolovozu 2018. na Githubu je kreiran pull-request u spremištu dodataka sa željom da se to omogući da sami odredimo kako da "pokvarimo" pom.xml. Programeri su slušali glasove onih koji pate, a već u decembru, sa izdavanjem nove verzije 1.1.0, pojavio se novi mod, resolveCiFriendliesOnly, u flatten-maven-plugin-u, koji je bio prikladniji nego ikad - odlazi pom.xml kakav jeste, osim elementa i dozvoljava ${revision}, ${sha1} и ${changelist}.

Dodavanje dodatka u projekat


  
    org.codehaus.mojo
    flatten-maven-plugin
    1.1.0
    
      istinito
      resolveCiFriendliesOnly
    
    
      
        izravnati
        proces-resursi
        
          izravnati
        
      
      
        flatten.clean
        cisto
        
          cisto
        
      
    
  

Gotovo!

Sretan kraj

Od sada, da bismo promijenili verziju cijelog projekta i obavijestili sve ovisnosti o tome, samo trebamo urediti elementrevizija> samo u korijenu pom.xml. Na recenziju ne stiže sto ili dve ovih fajlova sa istom izmjenom, već jedan. Pa, nema potrebe za korištenjem versions-maven-plugin.

izvor: www.habr.com

Dodajte komentar