Zkušenosti s používáním flatten-maven-pluginu pro zjednodušení verzování v projektech maven

O nás

V 1C vyvíjíme nejen platformu 1C: Enterprise na C ++ и JavaScript, ale také Java aplikace - zejména nové vývojové prostředí Nástroje pro rozvoj podniku založené na Eclipse a messenger serveru hluboce integrovaném s platformou - Interakční systémy.

Vstup

Nejčastěji používáme maven jako sestavovací systém pro Java aplikace a v tomto krátkém článku bychom chtěli hovořit o jednom z problémů, kterým jsme museli čelit v procesu organizace vývoje, a o přístupu, který nám umožnil tento problém překonat. problém.

Předpoklady a pracovní postup

Vzhledem ke specifikům vývoje v našich maven projektech používáme poměrně hodně modulů, závislostí a dětských projektů. Počet souborů pom v jednom stromu může být v desítkách nebo dokonce stovkách.

Zkušenosti s používáním flatten-maven-pluginu pro zjednodušení verzování v projektech maven

Zdálo by se: žádný velký problém, jednou to vytvořili a zapomněli na to. Pokud potřebujete změnit nebo přidat něco ve všech souborech najednou, existuje spousta pohodlných nástrojů v editorech a IDE. Jaká je nejčastější pravidelná změna na pom.xml? Věříme, že změny ve verzích a závislostech projektu. Možná s tím někdo bude chtít polemizovat, ale přesně taková je situace u nás. Důvod spočívá ve skutečnosti, že spolu s jádrem současně vyvíjíme mnoho vlastních knihoven a pro neustálou reprodukovatelnost výsledků sestavení a testování se nám použití snapshotů nezdá jako vhodný přístup. Z tohoto důvodu je nutné zvýšit číslo verze v projektech s každým sestavením.

Vývojář si také čas od času potřebuje postavit vlastní větev knihovny a zkontrolovat její funkčnost vůči všem závislostem, u všech musí ručně změnit verzi.

Prvotní řešení

S tak častými a vícenásobnými změnami verzí chci zjednodušit a zautomatizovat proces v rámci CI. Zde přichází na pomoc pohodlný, dobře známý plugin. verze-maven-plugin - připojte jej a spusťte

mvn -N verze:set -DnewVersion=2.0.1

a Maven udělá vše, jak má: bude procházet hierarchií odshora dolů a nahradí všechny verze – krása! Teď už zbývá jen vznést žádost o stažení, kolegové zkontrolují změny a vy se můžete rychle připojit k kmenu. Rychle? Bez ohledu na to, jak to je. Pár stovek pom.xml ke kontrole, a to nepočítá kód. Navíc nikdo není v bezpečí před konflikty sloučení s tak velkým počtem změněných souborů. Zde je třeba poznamenat, že v procesu CI dochází ke změnám verze automaticky spolu se změnami funkčnosti a ne nějak odděleně.

Nové funkce

Na chvíli jsme se uklidnili a rezignovaně jsme tak žili až do chlapů z Projekt Maven Apache Počínaje verzí 3.5.0-beta-1 Maven nezahrnoval podporu pro takzvané „placeholdery“. Podstatou těchto náhražek je to pom.xml místo konkrétního označení verze projektu jsou použity proměnné ${revision}, ${sha1} и ${changelist}. Samotné hodnoty těchto vlastností se nastavují buď v prvkuvlastnosti>, nebo je lze definovat pomocí systémové vlastnosti

mvn -Drevision=2.0.0 čistý balíček

Hodnoty systémových vlastností mají přednost před hodnotami definovanými vvlastnosti>.

Rodič

  4.0.0
  
    org.apache
    apache
    18
  
  org.apache.maven.ci
  ci-rodič
  První CI Friendly
  ${revision}${sha1}${changelist}
  ...
  
    1.3.1
    -MOMENTKA
    
  


Potomek

  4.0.0
  
    org.apache.maven.ci
    ci-rodič
    ${revision}${sha1}${changelist}
  
  org.apache.maven.ci
  ci-dítě
   ...

Pokud chcete sestavit verzi 2.0.0-SNAPSHOT, pak stačí použít

    mvn -Drevision=2.0.0 čistý balíček

Pokud chcete provést vydání, stačí resetovat SNAPSHOT

    mvn -Dchangelist= čistý balíček

*Výše uvedené příklady jsou převzaty z články na webu Maven Apache Project

Tvrdá realita

Všechno je dobré a zdravé, je čas cítit pocit zadostiučinění, ale ne. Ukazuje se, že tato metoda nebude fungovat pro instalaci a nasazení, protože nebude nahrazena v popisech artefaktů publikovaných v úložišti ${revision} na jeho významu a maven už nepochopí, o co jde.


    org.apache
    apache
    ${revision}

Světlo na konci tunelu

Musíme hledat řešení problému. Mohl zachránit situaci flatten-maven-plugin. Tento plugin vyřeší všechny proměnné v pom, ale zároveň vyřeže spoustu dalších informací, které jsou potřeba pouze při montáži a nejsou potřeba při importu publikovaných artefaktů do jiných projektů. Plugin také „narovná“ všechny závislosti mezi rodiči a dětmi a ve výsledku získáte plochý pom, který obsahuje vše, co potřebujete. Nepříjemnost spočívala v tom, že vystřihuje příliš mnoho „navíc“, což nám vůbec nevyhovovalo. Po prostudování informací o vývoji tohoto pluginu se ukázalo, že nejsme jediní ve vesmíru a ještě v srpnu 2018 byl na Githubu v repozitáři pluginů vytvořen pull-request s přáním to umožnit abychom sami určili, jak „zkazit“ pom.xml. Vývojáři vyslyšeli hlasy trpících a již v prosinci s vydáním nové verze 1.1.0 se v flatten-maven-pluginu objevil nový režim resolveCiFriendliesOnly, který byl vhodnější než kdy jindy - opouští pom.xml tak, jak je, kromě prvku a umožňuje ${revision}, ${sha1} и ${changelist}.

Přidání pluginu do projektu


  
    org.codehaus.mojo
    flatten-maven-plugin
    1.1.0
    
      skutečný
      resolveCiFriendliesOnly
    
    
      
        zploštit
        proces-zdroje
        
          zploštit
        
      
      
        zploštit.čistý
        čistý
        
          čistý
        
      
    
  

Hotovo!

Šťastný konec

Od této chvíle, abychom mohli změnit verzi celého projektu a dát o ní vědět všem závislostem, stačí upravit prvekrevize> pouze v kořeni pom.xml. Na recenzi nedorazí sto nebo dva těchto souborů se stejnou změnou, ale jeden. No, není potřeba používat verze-maven-plugin.

Zdroj: www.habr.com

Přidat komentář