Përvoja e përdorimit të flatten-maven-plugin për thjeshtimin e versionimit në projektet maven

Rreth nesh

NĂ« 1C ne zhvillojmĂ« jo vetĂ«m platformĂ«n 1C: NdĂ«rmarrja nĂ« C++ dhe JavaScript, por edhe aplikacione nĂ« Java – veçanĂ«risht njĂ« ambient tĂ« ri zhvillimi Mjetet pĂ«r Zhvillimin e NdĂ«rmarrjeve tĂ« bazuara nĂ« Eclipse dhe serveri i integruar thellĂ«sisht me platformĂ«n e mesazheve – Sistemet e NdĂ«rveprimit.

Hyrje

Si një sistem ndërtimi për aplikacionet Java, shpesh përdorim maven, dhe në këtë artikull të vogël do të dëshirojmë të flasim për një nga problemet me të cilat u përballëm gjatë organizimit të zhvillimit, dhe për qasjen që na lejoi ta kapërcejmë këtë problem.

Parakushtet dhe Procesi i Punës

Për shkak të specifikës së zhvillimit në projektet tona maven, ne përdorim një numër të madh moduli, varësish dhe projekte nënprojekte. Numri i skedave pom në një pemë mund të numërohet në dhjetëra dhe madje në qindra.

Përvoja e përdorimit të flatten-maven-plugin për thjeshtimin e versionimit në projektet maven

Duket se: nuk ka asgjë të keqe, një herë e krijuam dhe e harrojmë. Nëse duhet të ndryshojmë ose të shtojmë diçka në të gjitha skedat menjëherë, ekzistojnë shumë mjete të përshtatshme në redaktues dhe IDE. Dhe cila është ndryshimi më i zakonshëm i rregullt i pom.xml? Mendojmë se ndryshimi i versioneve të projektit dhe varësive. Ndoshta dikush do të dëshirojë të diskutojë për këtë, por kjo është situata jonë. Arsyeja qëndron në faktin se, përveç thelbit, ne parallelisht zhvillojmë shumë biblioteka të veta dhe për të ruajtur vazhdimësinë e rezultateve të ndërtimit dhe testimit, përdorimi i snapshot-ëve nuk na duket si një qasje e përshtatshme. Prandaj, na duhet të rrisim numrin e versionit në projekte me çdo ndërtim.

Gjithashtu, herë pas here zhvilluesi ka nevojë të ndërtojë degën e vet të ndonjë biblioteke dhe të kontrollojë funksionalitetin e saj në të gjitha varësitë, për çfarë në të gjitha ato duhet të ndryshojë manualisht versionin.

Zgjidhja Fillestare

Me kaq ndryshime tĂ« shpeshta dhe shumĂ«fishe tĂ« versioneve, dĂ«shirojmĂ« ta thjeshtojmĂ« dhe automatizojmĂ« procesin brenda CI. KĂ«tu vjen nĂ« ndihmĂ« njĂ« plugin i njohur dhe i pĂ«rshtatshĂ«m versions-maven-plugin — e lidhim dhe e ekzekutojmĂ«

mvn -N versions:set -DnewVersion=2.0.1

dhe maven do tĂ« bĂ«jĂ« gjithçka siç duhet: do tĂ« kalojĂ« nga maja deri nĂ« fund, do tĂ« zĂ«vendĂ«sojĂ« tĂ« gjitha versionet – bukuri! Tani mbetet tĂ« hapim njĂ« pull-request, kolegĂ«t do t'i shqyrtojnĂ« ndryshimet, dhe mund tĂ« futemi shpejt nĂ« trunk. Shpejt? Jo kaq shpejt. NjĂ« tĂ«rĂ«si e rreth disa qindra pom.xml nĂ« rishikim, dhe kjo nuk pĂ«rfshin kodin. PĂ«rveç kĂ«saj, askush nuk Ă«shtĂ« i mbrojtur nga konflikte tĂ« bashkimit me njĂ« numĂ«r tĂ« tillĂ« tĂ« modifikuar skedash. KĂ«tu duhet tĂ« theksohet se nĂ« procesin CI, ndryshimet e versioneve ndodhin automatikisht sĂ« bashku me ndryshimin e funksionalitetit, dhe jo ndaras.

Mundësi të reja

PĂ«r njĂ« kohĂ« ne u qetĂ«suam dhe, duke u pajtuar, kĂ«shtu jetuam, derisa djemtĂ« nga Maven Apache Project nuk pĂ«rfshinĂ« nĂ« maven, duke filluar nga versioni 3.5.0-beta-1, mbĂ«shtetje pĂ«r atĂ« qĂ« quhet „zĂ«vendĂ«sues” versionesh (placeholders). Esenca e kĂ«tyre zĂ«vendĂ«suesve Ă«shtĂ« se nĂ« pom.xml nĂ« vend tĂ« tregimit tĂ« saktĂ« tĂ« versionit tĂ« projektit, pĂ«rdoren variabla ${revision}, ${sha1} dhe ${changelist}.Vlerat e kĂ«tyre pronave janĂ« caktuar ose nĂ« elementin <propertietet> ose mund tĂ« pĂ«rcaktohen pĂ«rmes pronĂ«s sistemike

mvn -Drevision=2.0.0 clean package

Vlerat e pronave sistemike kanë përparësi përpara atyre të caktuara në <propertietet>.

Prind
<project>
  4.0.0
  <parent>
    org.apache
    apache
    18
  </parent>
  org.apache.maven.ci
  ci-parent
  Prindi i Parë CI
  <version>${revision}${sha1}${changelist}</version>
  

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

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

</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 dëshirojmë të bëjmë një lansim, thjesht e fshijmë SNAPSHOT

    mvn -Dchangelist= clean package

*Për shembujt e mësipërm janë marrë nga artikullit në faqen e internetit të Maven Apache Project

Realiteti i Ashpër

Gjithçka është mirë dhe e shëndetshme, është koha të përjetosh kënaqësinë, por jo. Duket se, për install dhe deploy kjo metodë nuk do të funksionojë, pasi në përshkrimet e artefakteve që publikohen në repozitor do të zbulohet ${revision} në vlerën e saj dhe maven nuk do të kuptojë më se për çfarë bëhet fjalë.

<parent>
    org.apache
    apache
    ${revision}
</parent>

Drita në fund të tunelit

Duhet tĂ« gjejmĂ« zgjidhjen e problemit. SituatĂ«n mund ta shpĂ«tonte flatten-maven-plugin. Ky ky plugin lejon tĂ« gjitha variablat nĂ« pom, por gjithashtu heq shumĂ« informacione tĂ« tjera qĂ« janĂ« tĂ« nevojshme vetĂ«m gjatĂ« ndĂ«rtimit dhe nuk janĂ« tĂ« nevojshme kur importohen artefaktet e publikuara nĂ« projekte tĂ« tjera. Gjithashtu, plugin-i "shkallzon" tĂ« gjitha varĂ«sitĂ« parent-child, dhe pĂ«rfundimisht ka pom tĂ« sheshtĂ«, duke pĂ«rfshirĂ« gjithçka qĂ« Ă«shtĂ« e nevojshme. Problemi ishte se ai heq "tĂ« tepĂ«rt" shumĂ«, gjĂ« qĂ« nuk na pĂ«rshtatet aspak. Pasi studiuam informacionin pĂ«r zhvillimin e kĂ«tij plugin-i, u zbulua se nuk ishim vetĂ«m nĂ« kĂ«tĂ« univers, dhe qĂ« nĂ« gusht 2018 nĂ« Github nĂ« depunimin e plugin-it u krijua njĂ« pull-request me dĂ«shirĂ«n pĂ«r tĂ« bĂ«rĂ« tĂ« mundur qĂ« tĂ« pĂ«rcaktohej vetĂ« se si duhej "prishur" pom.xml. Zhvilluesit i dĂ«gjuan zĂ«rat e nevojtarĂ«ve, dhe nĂ« dhjetor, me daljen e versionit tĂ« ri 1.1.0, nĂ« flatten-maven-plugin u shfaq njĂ« modifikuar i ri resolveCiFriendliesOnly, i cili ishte mĂ« i nevojshĂ«m se kurrĂ« – ai e la pom.xml ashtu siç ishte, pĂ«rveç elementit <version> dhe lejon ${revision}, ${sha1} dhe ${changelist}..

Shtojmë plugin-in në projekt

<plugins>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>flatten-maven-plugin</artifactId>
    <version>1.1.0</version>
    <configuration>
      <updatePomFile>true</updatePomFile>
      <flattenMode>resolveCiFriendliesOnly</flattenMode>
    </configuration>
    <executions>
      <execution>
        <id>flatten</id>
        <phase>process-resources</phase>
        <goals>
          <goal>flatten</goal>
        </goals>
      </execution>
      <execution>
        <id>flatten.clean</id>
        <phase>clean</phase>
        <goals>
          <goal>clean</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

Gati!

Happy end

Që nga tani, për të ndryshuar versionin e tërë projektit dhe për t'u bërë me dije për këtë të gjitha varësitë, na nevojitet vetëm të redaktojmë elementin <revision> në vetëm një rrënjë pom.xml. Në rivlerësim, nuk vjen njëqind ose dyqind nga këto skedarë me ndryshim të njëjtë, por një. Po ashtu, bien në përdorim versions-maven-plugin.

Burimi: habr.com

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