Patirtis naudojant flatten-maven-plugin, kad supaprastintumėte versijų kūrimą maven projektuose

apie mus

1C kuriame ne tik platformą 1C: įmonė apie C ++ и JavaScript, bet ir „Java“ programas – ypač naują kūrimo aplinką Įmonės plėtros įrankiai pagrįsta „Eclipse“ ir „Messenger“ serveriu, giliai integruotu su platforma - Sąveikos sistemos.

Įrašas

„Maven“ dažniausiai naudojame kaip „Java“ programų kūrimo sistemą, todėl šiame trumpame straipsnyje norėtume pakalbėti apie vieną iš problemų, su kuriomis teko susidurti organizuojant kūrimą, ir apie požiūrį, kuris leido mums tai įveikti. problema.

Būtinos sąlygos ir darbo eiga

Dėl kūrimo specifikos mūsų maven projektuose naudojame gana daug modulių, priklausomybių ir vaikų projektų. Pom failų skaičius viename medyje gali būti dešimtys ar net šimtai.

Patirtis naudojant flatten-maven-plugin, kad supaprastintumėte versijų kūrimą maven projektuose

Atrodytų: nieko baisaus, jie vieną kartą tai sukūrė ir pamiršo. Jei reikia ką nors pakeisti ar pridėti visuose failuose vienu metu, redaktoriuose ir IDE yra daug patogių įrankių. Koks yra dažniausiai įprastas pom.xml pakeitimas? Manome, kad keičiasi projekto versijos ir priklausomybės. Galbūt kas nors norės su tuo ginčytis, bet pas mus būtent tokia situacija. Priežastis slypi tame, kad kartu su branduoliu mes vienu metu kuriame daug savo bibliotekų, o norint, kad kūrimo ir testavimo rezultatai būtų nuolat atkuriami, momentinių nuotraukų naudojimas mums neatrodo patogus būdas. Dėl šios priežasties būtina padidinti versijos numerį projektuose su kiekviena versija.

Be to, kartkartėmis kūrėjas turi sukurti savo bibliotekos filialą ir patikrinti jo funkcionalumą pagal visas priklausomybes, dėl kurių jis turi rankiniu būdu pakeisti visų jų versiją.

Pradinis sprendimas

Dėl tokių dažnų ir daugybinių versijų keitimų noriu supaprastinti ir automatizuoti procesą CI. Čia į pagalbą ateina patogus, gerai žinomas įskiepis. versions-maven-plugin - prijunkite ir paleiskite

mvn -N versions:set -DnewVersion=2.0.1

o Mavenas padarys viską, kaip priklauso: eis per hierarchiją iš viršaus į apačią, pakeisdamas visas versijas – grožis! Dabar belieka iškelti ištraukimo užklausą, kolegos peržiūrės pakeitimus ir galėsite greitai prisijungti prie bagažinės. Greitai? Kad ir kaip būtų. Pora šimtų pom.xml peržiūrėti, ir tai neskaičiuojamas kodas. Be to, niekas nėra apsaugotas nuo sujungimo konfliktų esant tokiam daugybei pakeistų failų. Pažymėtina, kad CI procese versijų pakeitimai vyksta automatiškai kartu su funkcionalumo pokyčiais, o ne kažkaip atskirai.

Naujos funkcijos

Kurį laiką nusiraminome ir patys atsistatydinę taip gyvenome, kol vaikinai iš Maven Apache projektas Pradedant nuo 3.5.0-beta-1 versijos, Maven neįtraukė vadinamųjų "placeholders" palaikymo. Šių pakaitalų esmė ta pom.xml vietoj konkrečios projekto versijos nuorodos naudojami kintamieji ${revision}, ${sha1} и ${changelist}. Šių savybių reikšmės nustatomos arba elementesavybės> arba jie gali būti apibrėžti naudojant sistemos ypatybę

mvn -Drevision=2.0.0 švarus paketas

Sistemos savybių reikšmės turi viršenybę prieš reikšmes, nurodytassavybės>.

Tėvas

  4.0.0
  
    org.apache
    apache
    18
  
  org.apache.maven.ci
  ci-tėvas
  Pirmasis CI draugiškas
  ${revision}${sha1}${changelist}
  ...
  
    1.3.1
    - momentinė nuotrauka
    
  


Palikuonis

  4.0.0
  
    org.apache.maven.ci
    ci-tėvas
    ${revision}${sha1}${changelist}
  
  org.apache.maven.ci
  ci-vaikas
   ...

Jei norite sukurti 2.0.0-SNAPSHOT versiją, tiesiog naudokite

    mvn -Drevision=2.0.0 švarus paketas

Jei norite išleisti, tiesiog iš naujo nustatykite SNAPSHOT

    mvn -Dchangelist = švarus paketas

*Aukščiau pateikti pavyzdžiai paimti iš Straipsnis Maven Apache projekto svetainėje

Griežta realybė

Viskas gerai ir sveika, laikas jausti pasitenkinimą, bet ne. Pasirodo, šis metodas neveiks diegiant ir diegiant, nes jis nebus pakeistas saugykloje paskelbtuose artefaktų aprašymuose ${revision} dėl jo reikšmės ir maven nebesupras, apie ką kalbama.


    org.apache
    apache
    ${revision}

Šviesa tunelio gale

Turime ieškoti problemos sprendimo. Galėjo išgelbėti situaciją flatten-maven-plugin. Šis įskiepis išsprendžia visus pom kintamuosius, bet tuo pačiu išpjauna daug kitos informacijos, kurios reikia tik surinkimo metu ir kurios nereikia importuojant paskelbtus artefaktus į kitus projektus. Papildinys taip pat „ištaiso“ visas tėvų ir vaikų priklausomybes, todėl jūs gaunate plokščią komplektą, kuriame yra viskas, ko jums reikia. Nemalonumai buvo tai, kad išpjauna per daug „papildomų“, o tai mums visiškai netiko. Išstudijavus informaciją apie šio įskiepio kūrimą, paaiškėjo, kad esame ne vieninteliai visatoje, ir dar 2018 m. rugpjūčio mėn. Github įskiepių saugykloje buvo sukurtas užklausimas „pulti-pack“ su noru padaryti tai įmanoma norėdami patys nustatyti, kaip „sugadinti“ pom.xml. Kūrėjai įsiklausė į kenčiančiųjų balsus ir jau gruodį, išleidus naują 1.1.0 versiją, flatten-maven-plugin’e pasirodė naujas režimas – solveCiFriendliesOnly, kuris buvo kaip niekad tinkamas – išeina. pom.xml toks, koks yra, išskyrus elementą ir leidžia ${revision}, ${sha1} и ${changelist}.

Papildinio pridėjimas prie projekto


  
    org.codehaus.mojo
    flatten-maven-plugin
    1.1.0
    
      tiesa
      išspręstiCiFriendliesOnly
    
    
      
        išlyginti
        procesas-ištekliai
        
          išlyginti
        
      
      
        išlyginti.švarus
        švarus
        
          švarus
        
      
    
  

Priimta!

Laiminga pabaiga

Nuo šiol, norėdami pakeisti viso projekto versiją ir pranešti apie tai visoms priklausomybėms, tereikia redaguoti elementąperžiūrėjimas> tik šaknyje pom.xml. Į peržiūrą patenka ne šimtas ar du failai su tuo pačiu pakeitimu, o vienas. Na, nereikia naudoti versions-maven-plugin.

Šaltinis: www.habr.com

Добавить комментарий