Om os
Hos 1C udvikler vi ikke kun en platform
Indrejse
Vi bruger oftest maven som et byggesystem til Java-applikationer, og i denne korte artikel vil vi gerne tale om et af de problemer, vi skulle stå over for i processen med at organisere udviklingen, og om den tilgang, der gjorde det muligt for os at overvinde dette. problem.
Forudsætninger og arbejdsgang
På grund af udviklingen i vores maven-projekter, bruger vi en hel del moduler, afhængigheder og børneprojekter. Antallet af pom-filer i et træ kan være i tiere eller endda hundrede.
Det ser ud til: ingen big deal, de skabte det en gang og glemte det. Hvis du har brug for at ændre eller tilføje noget i alle filer på én gang, er der en masse praktiske værktøjer i editorer og IDE'er. Hvad er den mest almindelige regelmæssige ændring af pom.xml? Vi mener, at ændringer i projektversioner og afhængigheder. Måske vil nogen argumentere for dette, men dette er præcis situationen med os. Årsagen ligger i det faktum, at vi sammen med kernen samtidig udvikler mange af vores egne biblioteker, og for den konstante reproducerbarhed af bygge- og testresultater forekommer det ikke at bruge snapshots som en bekvem tilgang. Af denne grund er det nødvendigt at hæve versionsnummeret i projekter med hver build.
Fra tid til anden skal en udvikler også bygge sin egen gren af et bibliotek og kontrollere dets funktionalitet i forhold til alle afhængigheder, for hvilke han manuelt skal ændre versionen af dem alle.
Indledende løsning
Med så hyppige og flere versionsændringer ønsker jeg at forenkle og automatisere processen inden for CI. Det er her et bekvemt, velkendt plugin kommer til undsætning. versions-maven-plugin - tilslut den og start den
mvn -N versions:set -DnewVersion=2.0.1
og Maven vil gøre alt, som det skal: det vil løbe gennem hierarkiet fra top til bund og erstatte alle versioner - skønhed! Nu er der kun tilbage at rejse en pull-anmodning, kolleger vil gennemgå ændringerne, og du kan hurtigt komme med i bagagerummet. Hurtigt? Uanset hvordan det er. Et par hundrede pom.xml til gennemgang, og dette tæller ikke koden. Derudover er ingen sikker på at flette konflikter med et så stort antal ændrede filer. Det skal her bemærkes, at i CI-processen sker versionsændringer automatisk sammen med ændringer i funktionalitet og ikke på en eller anden måde separat.
Nye funktioner
Et stykke tid faldt vi til ro, og efter at have resigneret, levede vi sådan indtil fyrene fra
mvn -Drevision=2.0.0 ren pakke
Systemegenskabsværdier har forrang over værdier defineret iegenskaber>.
Forælder
4.0.0
org.apache
apache
18
org.apache.maven.ci
ci-forælder
Første CI venlige
${revision}${sha1}${changelist}
...
1.3.1
- SNAPSHOT
Efterkommer
4.0.0
org.apache.maven.ci
ci-forælder
${revision}${sha1}${changelist}
org.apache.maven.ci
ci-barn
...
Hvis du vil bygge version 2.0.0-SNAPSHOT, så brug bare
mvn -Drevision=2.0.0 ren pakke
Hvis du vil lave en udgivelse, skal du blot nulstille SNAPSHOT
mvn -Dchangelist= ren pakke
*Eksemplerne ovenfor er taget fra
Hård virkelighed
Alt er godt og sundt, det er tid til at føle en følelse af tilfredshed, men nej. Det viser sig, at denne metode ikke vil fungere til installation og udrulning, da den ikke vil blive erstattet i beskrivelserne af artefakter offentliggjort i depotet ${revision} på sin mening og maven vil ikke længere forstå, hvad det handler om.
org.apache
apache
${revision}
Et lys for enden af en tunnel
Vi skal lede efter en løsning på problemet. Kunne have reddet situationen
Tilføjelse af et plugin til projektet
org.codehaus.mojo
flatten-maven-plugin
1.1.0
rigtigt
løs kun CiFriendlies
flade
proces-ressourcer
flade
flade.rengør
ren
ren
Udført!
Lykkelig slutning
Fra nu af, for at ændre versionen af hele projektet og lade alle afhængigheder vide om det, skal vi bare redigere elementetrevision> kun i roden pom.xml. Ikke et hundrede eller to af disse filer med samme ændring ankommer til gennemgangen, men én. Nå, der er ingen grund til at bruge versions-maven-plugin.
Kilde: www.habr.com