Doświadczenie w używaniu wtyczki flatten-maven w celu uproszczenia wersjonowania w projektach maven

O nas

W 1C rozwijamy nie tylko platformę 1C: Przedsiębiorstwo na C++ и JAVASCRIPT, ale także aplikacje Java - w szczególności nowe środowisko programistyczne Narzędzia rozwoju przedsiębiorstwa oparty na Eclipse i serwerze komunikatorów głęboko zintegrowanym z platformą - Systemy interakcji.

Wejście

Najczęściej używamy mavena jako systemu kompilacji aplikacji Java i w tym krótkim artykule chcielibyśmy porozmawiać o jednym z problemów, z którymi musieliśmy się zmierzyć w procesie organizacji rozwoju oraz o podejściu, które pozwoliło nam to pokonać problem.

Warunki wstępne i przepływ pracy

Ze względu na specyfikę rozwoju w naszych projektach mavenowych wykorzystujemy całkiem sporo modułów, zależności i projektów potomnych. Liczba plików pom w jednym drzewie może wynosić dziesiątki, a nawet setki.

Doświadczenie w używaniu wtyczki flatten-maven w celu uproszczenia wersjonowania w projektach maven

Wydawałoby się: nic wielkiego, raz to stworzyli i zapomnieli o tym. Jeśli chcesz zmienić lub dodać coś we wszystkich plikach na raz, w edytorach i IDE dostępnych jest wiele wygodnych narzędzi. Jaka jest najczęstsza regularna zmiana w pliku pom.xml? Wierzymy, że zmiany w wersjach projektu i zależnościach. Być może ktoś będzie chciał się z tym kłócić, ale u nas dokładnie tak jest. Powodem jest to, że wraz z jądrem rozwijamy jednocześnie wiele własnych bibliotek, a dla stałej powtarzalności wyników kompilacji i testów stosowanie migawek nie wydaje nam się wygodnym podejściem. Z tego powodu konieczne jest podnoszenie numeru wersji w projektach przy każdej kompilacji.

Ponadto od czasu do czasu programista musi zbudować własną gałąź biblioteki i sprawdzić jej funkcjonalność pod kątem wszystkich zależności, dla których musi ręcznie zmienić wersję wszystkich z nich.

Rozwiązanie początkowe

Przy tak częstych i wielokrotnych zmianach wersji chcę uprościć i zautomatyzować proces w ramach CI. Tutaj z pomocą przychodzi wygodna, dobrze znana wtyczka. wersje-maven-plugin - podłącz go i uruchom

mvn -N wersje: zestaw -DnewVersion=2.0.1

a Maven zrobi wszystko tak, jak powinien: przebiegnie hierarchię od góry do dołu, zastępując wszystkie wersje - piękność! Teraz pozostaje tylko zgłosić żądanie ściągnięcia, współpracownicy przejrzą zmiany i będziesz mógł szybko dołączyć do łącza trunkingowego. Szybko? Nieważne jak to jest. Kilkaset pom.xml do przeglądu i to nie jest liczenie kodu. Ponadto nikt nie jest bezpieczny przed konfliktami scalania przy tak dużej liczbie zmienionych plików. Należy tu zaznaczyć, że w procesie CI zmiany wersji następują automatycznie wraz ze zmianami funkcjonalności, a nie jakoś osobno.

Nowe funkcje

Na chwilę uspokoiliśmy się i po rezygnacji żyliśmy tak, aż do chłopaków Projekt Maven Apache Począwszy od wersji 3.5.0-beta-1, Maven nie zawierał obsługi tzw. „placeholderów”. Istota tych substytutów polega na tym pom.xml zamiast konkretnego wskazania wersji projektu stosuje się zmienne ${wersja}, ${sha1} и ${lista zmian}. Same wartości tych właściwości są ustawiane albo w elemencieniska zabudowa> lub można je zdefiniować poprzez właściwość systemową

mvn -Drevision=2.0.0 czysty pakiet

Wartości właściwości systemowych mają pierwszeństwo przed wartościami zdefiniowanymi wniska zabudowa>.

Rodzic

  4.0.0
  
    org.apache
    Apache
    18
  
  org.apache.maven.ci
  ci-rodzic
  Pierwszy przyjazny dla CI
  ${wersja}${sha1}${lista zmian}
  ...
  
    1.3.1
    -MIGAWKA
    
  


Potomek

  4.0.0
  
    org.apache.maven.ci
    ci-rodzic
    ${wersja}${sha1}${lista zmian}
  
  org.apache.maven.ci
  ci-dziecko
   ...

Jeśli chcesz zbudować wersję 2.0.0-SNAPSHOT, po prostu użyj

    mvn -Drevision=2.0.0 czysty pakiet

Jeśli chcesz wydać wersję, po prostu zresetuj SNAPSHOT

    mvn -Dchangelist= czysty pakiet

*Powyższe przykłady pochodzą z Artykuł na stronie internetowej projektu Maven Apache

Brutalna rzeczywistość

Wszystko dobrze i zdrowo, czas poczuć satysfakcję, ale nie. Okazuje się, że ta metoda nie będzie działać w przypadku instalacji i wdrażania, ponieważ nie zostanie zastąpiona w opisach artefaktów publikowanych w repozytorium ${wersja} na jego znaczeniu, a Maven nie będzie już rozumiał, o co w tym wszystkim chodzi.


    org.apache
    Apache
    ${wersja}

Światło na końcu tunelu

Musimy poszukać rozwiązania problemu. Mógłby uratować sytuację flatten-maven-plugin. Ta wtyczka rozwiązuje wszystkie zmienne w pom, ale jednocześnie wycina wiele innych informacji, które są potrzebne tylko podczas montażu i nie są potrzebne podczas importowania opublikowanych artefaktów do innych projektów. Wtyczka „prostuje” także wszystkie zależności rodzic-dziecko, w wyniku czego otrzymujesz płaski pom, który zawiera wszystko, czego potrzebujesz. Niedogodnością było to, że wycinało za dużo „dodatków”, co zupełnie nam nie odpowiadało. Po przestudiowaniu informacji na temat rozwoju tej wtyczki okazało się, że nie jesteśmy jedyni we wszechświecie i już w sierpniu 2018 roku na Githubie w repozytorium wtyczek utworzono pull-request z chęcią umożliwienia aby samodzielnie ustalić, jak „zepsuć” pom.xml. Twórcy wsłuchali się w głosy cierpiących i już w grudniu wraz z wydaniem nowej wersji 1.1.0 we wtyczce flatten-maven pojawił się nowy tryb, requireCiFriendliesOnly, który był bardziej odpowiedni niż kiedykolwiek - pozostawia pom.xml bez zmian, z wyjątkiem elementu i pozwala ${wersja}, ${sha1} и ${lista zmian}.

Dodanie wtyczki do projektu


  
    org.codehaus.mojo
    flatten-maven-plugin
    1.1.0
    
      PRAWDA
      rozwiązaćTylkoCiFriendlies
    
    
      
        spłaszczyć
        zasoby procesowe
        
          spłaszczyć
        
      
      
        spłaszczyć. oczyścić
        czysty
        
          czysty
        
      
    
  

Gotowe!

szczęśliwe zakończenie

Od tej chwili, aby zmienić wersję całego projektu i dać znać o tym wszystkim zależnościom, wystarczy, że dokonamy edycji elementurewizja> tylko w katalogu głównym pom.xml. Do recenzji trafia nie sto czy dwa takie pliki z tą samą zmianą, ale jeden. Cóż, nie ma potrzeby używać wersje-maven-plugin.

Źródło: www.habr.com

Dodaj komentarz