om oss
Hos 1C utvikler vi ikke bare en plattform
Entry
Vi bruker oftest maven som et byggesystem for Java-applikasjoner, og i denne korte artikkelen vil vi gjerne snakke om et av problemene vi måtte møte i prosessen med å organisere utviklingen, og om tilnærmingen som gjorde at vi kunne overvinne dette problem.
Forutsetninger og arbeidsflyt
På grunn av utviklingen i våre maven-prosjekter, bruker vi ganske mange moduler, avhengigheter og barneprosjekter. Antallet pom-filer i ett tre kan være i titalls eller hundrevis.
Det ser ut til: ingen big deal, de skapte det en gang og glemte det. Hvis du trenger å endre eller legge til noe i alle filer samtidig, er det mange praktiske verktøy i redaktører og IDE-er. Hva er den vanligste endringen til pom.xml? Vi tror at endringer i prosjektversjoner og avhengigheter. Kanskje noen vil krangle med dette, men dette er akkurat situasjonen hos oss. Årsaken ligger i det faktum at vi, sammen med kjernen, samtidig utvikler mange av våre egne biblioteker, og for den konstante reproduserbarheten av bygge- og testresultater virker bruken av øyeblikksbilder ikke for oss som en praktisk tilnærming. Av denne grunn er det nødvendig å heve versjonsnummeret i prosjekter med hvert bygg.
Også, fra tid til annen, må en utvikler bygge sin egen gren av et bibliotek og sjekke funksjonaliteten mot alle avhengigheter, som han må manuelt endre versjonen av alle.
Opprinnelig løsning
Med slike hyppige og flere versjonsendringer ønsker jeg å forenkle og automatisere prosessen innenfor CI. Det er her en praktisk, velkjent plugin kommer til unnsetning. versjoner-maven-plugin - koble den til og start den
mvn -N versions:set -DnewVersion=2.0.1
og Maven vil gjøre alt som det skal: det vil løpe gjennom hierarkiet fra topp til bunn, og erstatte alle versjoner - skjønnhet! Nå gjenstår det bare å reise en pull-forespørsel, kolleger vil gjennomgå endringene, og du kan raskt bli med i bagasjerommet. Raskt? Uansett hvordan det er. Et par hundre pom.xml for gjennomgang, og dette teller ikke koden. I tillegg er ingen trygge for å slå sammen konflikter med et så stort antall endrede filer. Det skal bemerkes her at i CI-prosessen skjer versjonsendringer automatisk sammen med endringer i funksjonalitet, og ikke på en eller annen måte separat.
Nye funksjoner
En stund roet vi oss ned og etter å ha resignert, levde vi sånn til gutta fra
mvn -Drevision=2.0.0 ren pakke
Systemegenskapsverdier har forrang over verdier definert iegenskaper>.
Foreldre
4.0.0
org.apache
apache
18
org.apache.maven.ci
ci-forelder
Første CI Friendly
${revision}${sha1}${changelist}
...
1.3.1
- STILLBILDE
Etterkommer
4.0.0
org.apache.maven.ci
ci-forelder
${revision}${sha1}${changelist}
org.apache.maven.ci
ci-barn
...
Hvis du vil bygge versjon 2.0.0-SNAPSHOT, er det bare å bruke
mvn -Drevision=2.0.0 ren pakke
Hvis du vil lage en utgivelse, er det bare å tilbakestille SNAPSHOT
mvn -Dchangelist= ren pakke
*Eksemplene ovenfor er hentet fra
Brutal virkelighet
Alt er bra og sunt, det er på tide å føle en følelse av tilfredshet, men nei. Det viser seg at denne metoden ikke vil fungere for installasjon og distribusjon, siden den ikke vil bli erstattet i beskrivelsene av artefakter publisert i depotet ${revisjon} på sin mening og maven vil ikke lenger forstå hva det handler om.
org.apache
apache
${revisjon}
Et lys i enden av en tunnel
Vi må se etter en løsning på problemet. Kunne reddet situasjonen
Legger til en plugin til prosjektet
org.codehaus.mojo
flatten-maven-plugin
1.1.0
ekte
løse CiFriendliesOnly
flate ut
prosess-ressurser
flate ut
flate.rengjør
ren
ren
Ferdig!
Lykkelig slutt
Fra nå av, for å endre versjonen av hele prosjektet og la alle avhengigheter få vite om det, trenger vi bare å redigere elementetrevisjon> i bare roten pom.xml. Ikke hundre eller to av disse filene med samme endring kommer frem til anmeldelsen, men én. Vel, det er ikke nødvendig å bruke versjoner-maven-plugin.
Kilde: www.habr.com