Maranasan ang paggamit ng flatten-maven-plugin upang pasimplehin ang pag-bersyon sa mga proyekto ng maven

Tungkol sa amin

Sa 1C bumuo kami hindi lamang isang platform 1C: Enterprise sa C ++ ΠΈ JavaScript, ngunit gayundin ang mga aplikasyon ng Java - lalo na ang bagong kapaligiran sa pag-unlad Enterprise Development Tools batay sa Eclipse at isang messenger server na malalim na isinama sa platform - Mga Sistema ng Pakikipag-ugnayan.

Pagpasok

Madalas naming ginagamit ang maven bilang isang build system para sa mga application ng Java, at sa maikling artikulong ito nais naming pag-usapan ang tungkol sa isa sa mga problema na kinailangan naming harapin sa proseso ng pag-aayos ng pag-unlad, at tungkol sa diskarte na nagpapahintulot sa amin na malampasan ito. problema.

Mga kinakailangan at daloy ng trabaho

Dahil sa mga detalye ng pag-unlad sa aming mga maven na proyekto, gumagamit kami ng napakaraming mga module, dependency at mga proyekto ng bata. Ang bilang ng mga pom file sa isang puno ay maaaring nasa sampu o kahit daan-daan.

Maranasan ang paggamit ng flatten-maven-plugin upang pasimplehin ang pag-bersyon sa mga proyekto ng maven

Tila: walang malaking bagay, nilikha nila ito nang isang beses at nakalimutan ang tungkol dito. Kung kailangan mong baguhin o magdagdag ng isang bagay sa lahat ng mga file nang sabay-sabay, mayroong maraming mga maginhawang tool sa mga editor at IDE. Ano ang pinakakaraniwang regular na pagbabago sa pom.xml? Naniniwala kami na ang mga pagbabago sa mga bersyon ng proyekto at dependency. Marahil ay may gustong makipagtalo dito, ngunit ito mismo ang sitwasyon sa atin. Ang dahilan ay nakasalalay sa katotohanan na, kasama ang kernel, sabay-sabay nating binubuo ang marami sa ating sariling mga aklatan, at para sa patuloy na muling paggawa ng mga resulta ng pagbuo at pagsubok, ang paggamit ng mga snapshot ay tila hindi isang maginhawang diskarte para sa amin. Para sa kadahilanang ito, kinakailangang itaas ang numero ng bersyon sa mga proyekto sa bawat build.

Gayundin, paminsan-minsan, kailangan ng developer na bumuo ng sarili niyang sangay ng isang library at suriin ang functionality nito laban sa lahat ng dependencies, kung saan kailangan niyang manual na baguhin ang bersyon ng lahat ng mga ito.

Paunang solusyon

Sa ganitong madalas at maraming pagbabago sa bersyon, gusto kong pasimplehin at i-automate ang proseso sa loob ng CI. Dito nagliligtas ang isang maginhawa at kilalang plugin. versions-maven-plugin - ikonekta ito at ilunsad ito

mvn -N versions:set -DnewVersion=2.0.1

at gagawin ni Maven ang lahat ayon sa nararapat: tatakbo ito sa hierarchy mula sa itaas hanggang sa ibaba, na papalitan ang lahat ng bersyon - kagandahan! Ngayon ang natitira na lang ay magtaas ng kahilingan sa paghila, susuriin ng mga kasamahan ang mga pagbabago, at mabilis kang makakasali sa trunk. Mabilis? Hindi mahalaga kung paano ito ay. Isang pares ng daan pom.xml para sa pagsusuri, at hindi ito binibilang ang code. Bilang karagdagan, walang ligtas mula sa pagsasanib ng mga salungatan sa napakaraming bilang ng mga binagong file. Dapat pansinin dito na sa proseso ng CI, awtomatikong nagaganap ang mga pagbabago sa bersyon kasama ng mga pagbabago sa functionality, at hindi kahit papaano nang hiwalay.

Mga Bagong Tampok

Ilang sandali kaming huminahon at, nang nagbitiw sa aming sarili, namuhay kami nang ganoon hanggang sa mga lalaki mula Maven Apache Project Simula sa bersyon 3.5.0-beta-1, hindi isinama ni Maven ang suporta para sa tinatawag na "mga placeholder". Ang kakanyahan ng mga kapalit na ito ay iyon pom.xml sa halip na isang tiyak na indikasyon ng bersyon ng proyekto, ginagamit ang mga variable ${rebisyon}, ${sha1} ΠΈ ${changelist}. Ang mga halaga ng mga pag-aari na ito mismo ay itinakda alinman sa elementomga katangian>, o maaari silang tukuyin sa pamamagitan ng isang system property

mvn -Drevision=2.0.0 malinis na pakete

Ang mga halaga ng ari-arian ng system ay nangunguna sa mga halagang tinukoy samga katangian>.

Magulang

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


Kaapu-apuhan

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

Kung gusto mong bumuo ng bersyon 2.0.0-SNAPSHOT, pagkatapos ay gamitin lamang

    mvn -Drevision=2.0.0 malinis na pakete

Kung gusto mong gumawa ng release, i-reset lang ang SNAPSHOT

    mvn -Dchangelist= malinis na pakete

*Ang mga halimbawa sa itaas ay kinuha mula sa Artikulo sa website ng Maven Apache Project

Malupit na katotohanan

Ang lahat ay mabuti at malusog, oras na para makaramdam ng kasiyahan, ngunit hindi. Lumalabas na ang pamamaraang ito ay hindi gagana para sa pag-install at pag-deploy, dahil hindi ito mapapalitan sa mga paglalarawan ng mga artifact na nai-publish sa repository ${rebisyon} sa kahulugan nito at hindi na mauunawaan ni maven kung ano ang tungkol dito.


    org.apache
    apache
    ${rebisyon}

Isang liwanag sa dulo ng isang lagusan

Kailangan nating maghanap ng solusyon sa problema. Maaaring nailigtas ang sitwasyon patagin-maven-plugin. Niresolba ng plugin na ito ang lahat ng mga variable sa pom, ngunit sa parehong oras ay pinuputol ang maraming iba pang impormasyon na kailangan lamang sa panahon ng pagpupulong at hindi kinakailangan kapag nag-import ng mga nai-publish na artifact sa iba pang mga proyekto. Ang plugin ay "itinutuwid" din ang lahat ng mga dependency ng magulang-anak, at bilang resulta, makakakuha ka ng flat pom na kasama ang lahat ng kailangan mo. Ang abala ay na pinuputol nito ang masyadong maraming "dagdag", na hindi nababagay sa amin. Matapos pag-aralan ang impormasyon sa pag-unlad ng plugin na ito, lumabas na hindi lang kami ang nasa uniberso, at noong Agosto 2018, isang pull-request ang ginawa sa Github sa repository ng plugin na may pagnanais na gawin itong posible upang matukoy sa ating sarili kung paano "palayawin" ang pom.xml. Ang mga developer ay nakinig sa mga tinig ng mga nagdurusa, at na noong Disyembre, sa paglabas ng bagong bersyon 1.1.0, isang bagong mode, resolveCiFriendliesOnly, ay lumitaw sa flatten-maven-plugin, na mas angkop kaysa dati - umalis ito pom.xml bilang ay, maliban sa elemento at nagpapahintulot ${rebisyon}, ${sha1} ΠΈ ${changelist}.

Pagdaragdag ng isang plugin sa proyekto


  
    org.codehaus.mojo
    patagin-maven-plugin
    1.1.0
    
      totoo
      resolveCiFriendliesOnly
    
    
      
        patagin
        proseso-resources
        
          patagin
        
      
      
        patagin.malinis
        malinis
        
          malinis
        
      
    
  

Tapos na!

Masayang pagtatapos

Mula ngayon, upang mabago ang bersyon ng buong proyekto at ipaalam sa lahat ng mga dependency ang tungkol dito, kailangan lang nating i-edit ang elementorebisyon> sa ugat pa lang pom.xml. Hindi isang daan o dalawa sa mga file na ito na may parehong pagbabago ang dumating sa pagsusuri, ngunit isa. Well, hindi na kailangang gamitin versions-maven-plugin.

Pinagmulan: www.habr.com

Magdagdag ng komento