NĂ« lidhje me ne
NĂ« 1C ne zhvillojmĂ« jo vetĂ«m platformĂ«n nĂ« dhe , por edhe aplikacione nĂ« Java â nĂ« veçanti ambientin e ri tĂ« zhvillimit tĂ« bazuara nĂ« Eclipse dhe njĂ« server i thellĂ« e i integruar me platformĂ«n e mesazheve â .
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.

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 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 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 . 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
