Përvoja e përdorimit të flatten-maven-plugin për të thjeshtuar versionimin në projektet maven

NĂ« lidhje me ne

NĂ« 1C ne zhvillojmĂ« jo vetĂ«m platformĂ«n 1C: NdĂ«rmarrja nĂ« C++ dhe JavaScript, por edhe aplikacione nĂ« Java – nĂ« veçanti ambientin e ri tĂ« zhvillimit Mjete tĂ« Zhvillimit tĂ« NdĂ«rmarrjeve tĂ« bazuara nĂ« Eclipse dhe njĂ« server i thellĂ« e i integruar me platformĂ«n e mesazheve – Sistemet e NdĂ«rveprimit.

Hyrje

Si sistem ndërtimi për aplikacionet Java, shpesh përdorim maven, dhe në këtë artikull të vogël do të doja të flisja për një nga problemet që na është dashur të përballeshim gjatë organizimit të zhvillimit dhe për qasjen që na ndihmoi ta zgjidhnim këtë problem.

Premisat dhe procesi i punës

Për shkak të specifikës së zhvillimit në projektet tona maven përdorim një numër të konsiderueshëm modulash, varësish dhe projekteve të nënshkruara. Numri i skedarëve pom në një pemë mund të llogaritet në dhjetëra, madje edhe në qindra.

Përvoja e përdorimit të flatten-maven-plugin për të thjeshtuar versionimin në projektet maven

Duket se: nuk ka asgjë të keqe, një herë e krijuam dhe e harroi. Nëse duhet të ndryshojmë ose të shtojmë diçka në të gjitha skedarët menjëherë, ekzistojnë shumë mjete të përshtatshme në redaktorë dhe IDE. Por cili është ndryshimi më i zakonshëm i përhershëm në pom.xml? Mendojmë se është ndryshimi i versioneve të projekteve dhe varësive. Ndoshta dikush do të dëshironin të kundërshtonin këtë, por kështu kemi punët. Arsyeja është se përveç bërthamës ne paralelisht zhvillojmë shumë biblioteka të veta, dhe për të siguruar rigjenerueshmëri të vazhdueshme të rezultateve të ndërtimit dhe testimit, përdorimi i snapshot-ëve nuk na duket një qasje e përshtatshme. Për këtë arsye, na duhen të rrisim numrin e versionit në projekte me çdo ndërtim.

Po ashtu, ndonjëherë zhvilluesi ka nevojë të ndërtojë depon e tij të një biblioteke dhe ta testojë funksionalitetin e saj në të gjitha varësitë, për çfarë në të gjitha ato duhet të ndryshojmë manualisht versionin.

Zgjidhja fillestare

Me kaq shpesh dhe shumĂ« ndryshime versioni, procesi nĂ« kuadĂ«r tĂ« CI dĂ«shiron tĂ« thjeshtohet dhe automatizohet. KĂ«tu ndihmon njĂ« plugin i njohur dhe i pĂ«rshtatshĂ«m versions-maven-plugin — e lidhim dhe e fillojmĂ«

mvn -N versions:set -DnewVersion=2.0.1

dhe maven do ta bĂ«jĂ« gjithçka siç duhet: do tĂ« kalojĂ« nĂ«pĂ«r hierarkinĂ« nga lart deri poshtĂ«, do tĂ« zĂ«vendĂ«sojĂ« tĂ« gjitha versionet – bukuri! Tani mbetet tĂ« rrisim njĂ« pull-request, kolegĂ«t do ta shqyrtojnĂ« ndryshimin dhe mund tĂ« futemi shpejt nĂ« trunk. Shpejt? Siç duket jo. NjĂ« ose dyqind pom.xml nĂ« shqyrtim, dhe kjo nuk pĂ«rfshin kodin. PĂ«rveç kĂ«saj, askush nuk Ă«shtĂ« i sigurt nga konfliktet e bashkimit kur ka kaq shumĂ« skedarĂ« tĂ« ndryshuar. Duhet tĂ« theksohet se gjatĂ« procesit tĂ« CI, ndryshimet e versioneve ndodhin automatikisht sĂ« bashku me ndryshimin e funksionalitetit, e jo ndaras.

Veçoritë e reja

Për një kohë, ne u qetësuam dhe, pasivizuar, ashtu jetuam, derisa djemtë nga Projekti Apache Maven në përfshinë në maven, duke filluar nga versioni 3.5.0-beta-1, mbështetje për "zamjen" e ashtuquajtur të versioneve (placeholders). Qëllimi i këtyre zëvendësuesve është se në pom.xml në vend të një përcaktimi konkret të versionit të projektit, përdoren variablat ${revision}, ${sha1} dhe ${changelist}. Vlerat e këtyre pronave përcaktohen ose në elementin <properties>, ose mund të definohen përmes pronës sistemike

mvn -Drevision=2.0.0 clean package

Vlerat e pronunciave sistemike kanë përparësi mbi vlerat e përcaktuara në <properties>.

Prind
<project>
  <modelVersion>4.0.0<\/modelVersion>
  <parent>
    <groupId>org.apache<\/groupId>
    <artifactId>apache<\/artifactId>
    <version>18<\/version>
  <\/parent>
  <groupId>org.apache.maven.ci<\/groupId>
  <artifactId>ci-parent<\/artifactId>
  <name>CI i Parë i Miqësor<\/name>
  <version>${revision}${sha1}${changelist}<\/version>
  

  <properties>
    <revision>1.3.1<\/revision>
    <changelist>-SNAPSHOT<\/changelist>
    <sha1\/>
  <\/properties>
<\/project>

Pasardhës
<project>
  <modelVersion>4.0.0<\/modelVersion>
  <parent>
    <groupId>org.apache.maven.ci<\/groupId>
    <artifactId>ci-parent<\/artifactId>
    <version>${revision}${sha1}${changelist}<\/version>
  <\/parent>
  <groupId>org.apache.maven.ci<\/groupId>
  <artifactId>ci-child<\/artifactId>
   

<\/project>

Nëse dëshirojmë të ndërtojmë versionin 2.0.0-SNAPSHOT, thjesht përdorim

    mvn -Drevision=2.0.0 clean package

Nëse duam të bëjmë një lëshim, thjesht e zerojmë SNAPSHOT

    mvn -Dchangelist= clean package

*Shembujt e mësipërm janë marrë nga artikulli në faqen e internetit të Projektit Maven Apache

Realiteti i ashpër

Çdo gjĂ« Ă«shtĂ« mirĂ« dhe e bukur, Ă«shtĂ« koha pĂ«r tĂ« provuar ndjenjĂ«n e kĂ«naqĂ«sisĂ«, por jo. Dukesh se pĂ«r install dhe deploy ky mĂ«nyrĂ« nuk do tĂ« funksionojĂ«, pasi nĂ« pĂ«rshkrimet qĂ« publikohen nĂ« repozitorinĂ« e artefakteve nuk do tĂ« zĂ«vendĂ«sohet ${revision} me vlerĂ«n e saj, dhe maven nuk do ta kuptojĂ« se pĂ«r çfarĂ« Ă«shtĂ« fjala.

<parent>
    <groupId>org.apache<\/groupId>
    <artifactId>apache<\/artifactId>
    <version>${revision}<\/version>
<\/parent>

Drita në fund të tunelit

Duhet tĂ« kĂ«rkojmĂ« njĂ« zgjidhje pĂ«r problemin. SituatĂ«n do ta kishte shpĂ«tuar flatten-maven-plugin. Ky kyç Ă«shtĂ« t'i lejojnĂ« tĂ« gjitha variablat nĂ« pom, por gjithashtu heq shumĂ« informacione tĂ« tjera, tĂ« cilat janĂ« tĂ« nevojshme vetĂ«m gjatĂ« ndĂ«rtimit dhe nuk janĂ« tĂ« nevojshme pĂ«r importimin e artefakteve tĂ« publikuara nĂ« projekte tĂ« tjera. Gjithashtu, ky plugin "shkallĂ«zon" tĂ« gjitha varĂ«sitĂ« nĂ«nĂ«-prind, dhe si rezultat kemi pom tĂ« sheshtĂ«, qĂ« pĂ«rfshijnĂ« gjithçka qĂ« na nevojitet. Sfidat qĂ«ndronin nĂ« faktin se ai heq "tĂ« tepĂ«rt", shumĂ« qĂ« nuk na pĂ«lqente. Pasi hulumtuam informacionin mbi zhvillimin e kĂ«tij plugin-i, zbulonim se nuk ishim tĂ« vetmit nĂ« univers, dhe gjithashtu nĂ« gusht 2018 nĂ« GitHub, nĂ« depozitĂ«n e plugin-it ishte krijuar njĂ« pull-request me dĂ«shirĂ«n pĂ«r tĂ« bĂ«rĂ« tĂ« mundur pĂ«rcaktimin e mĂ«nyrĂ«s se si duhet "prishur" pom.xml. Zhvilluesit u dĂ«gjuan nga zĂ«ra tĂ« dĂ«shpĂ«ruar, dhe tashmĂ« nĂ« dhjetor, me daljen e versionit tĂ« ri 1.1.0, nĂ« flatten-maven-plugin u shfaq njĂ« modalitet i ri resolveCiFriendliesOnly, i cili Ă«shtĂ« mĂ« se i pĂ«rshtatshĂ«m – ai e lĂ« pom.xml siç Ă«shtĂ«, pĂ«rveç elementit <version> dhe lejon ${revision}, ${sha1} dhe ${changelist}.

Shto plugin në projekt

<plugins>
  <plugin>
    org.codehaus.mojo
    flatten-maven-plugin
    1.1.0
    <configuration>
      true
      <flattenMode>resolveCiFriendliesOnly</flattenMode>
    </configuration>
    <executions>
      <execution>
        flatten
        process-resources
        <goals>
          flatten
        </goals>
      </execution>
      <execution>
        flatten.clean
        clean
        <goals>
          clean
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

Gati!

Përfundimi i lumtur

Tanime, për të ndryshuar versionin e gjithë projektit dhe për të njoftuar të gjitha varësitë për këtë, na nevojitet vetëm të redaktojmë elementin <revision> në vetëm një në rrënjën pom.xml. Në revistë nuk arrin një qind apo dyqind nga këto skedarë me të njëjtin ndryshim, por një. Dhe gjithashtu, nuk ka nevojë të përdoret versions-maven-plugin.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster