Quelli di noi
À 1C sviluppemu micca solu una piattaforma nantu и , ma ancu applicazioni Java - in particulare u novu ambiente di sviluppu basatu annantu à Eclipse è un servitore di messenger prufondamente integratu cù a piattaforma - .
Plus
U più spessu usamu Maven cum'è un sistema di custruzzione per l'applicazioni Java, è in questu brevi articulu vulemu parlà di unu di i prublemi chì avemu avutu à affruntà in u prucessu di urganizazione di u sviluppu, è di l'approcciu chì ci hà permessu di superà questu. prublema.
Prerequisiti è flussu di travagliu
A causa di e specificità di u sviluppu in i nostri prughjetti maven, usemu assai moduli, dipendenze è prughjetti di i zitelli. U numaru di schedarii pom in un arbulu pò esse in decine o ancu centu.

Sembra: micca grande affare, anu creatu una volta è s'hè scurdatu. Sè avete bisognu di cambià o aghjunghje qualcosa in tutti i schedari à una volta, ci sò assai strumenti convenienti in editori è IDE. Chì ghjè u cambiamentu regulare più cumuni à pom.xml? Cridemu chì i cambiamenti in e versioni di u prughjettu è e dipendenze. Forsi qualcunu vulete discutiri cun questu, ma questu hè esattamente a situazione cun noi. U mutivu si trova in u fattu chì, cù u kernel, avemu sviluppatu simultaneamente assai di e nostre biblioteche, è per a riproducibilità constante di i risultati di custruzzione è teste, l'usu di snapshots ùn ci pare micca un accostu còmuda. Per quessa, hè necessariu di elevà u numeru di versione in i prughjetti cù ogni custruzzione.
Inoltre, da u tempu à u tempu, un sviluppatore hà bisognu di custruisce u so propiu ramu di una biblioteca è verificate a so funziunalità contr'à tutte e dipendenze, per quale hà da cambià manualmente a versione di tutti.
Soluzione iniziale
Cù tali cambiamenti frequenti è multiplici di versione, vogliu simplificà è automatizà u prucessu in CI. Questu hè induve un plugin còmuda, ben cunnisciutu, vene in salvezza. versions-maven-plugin - cunnette lu è lanciari lu
mvn -N versioni: set -DnewVersion=2.0.1
è Maven farà tuttu ciò chì deve: correrà à traversu a ghjerarchia da cima à fondu, rimpiazzà tutte e versioni - bellezza! Avà tuttu ciò chì resta hè di elevà una dumanda di pull, i culleghi riviseranu i cambiamenti, è pudete unisce rapidamente à u troncu. Prestu? Ùn importa micca cumu hè. Un paru di centu pom.xml per rivisione, è questu ùn hè micca cuntatu u codice. In più, nimu hè salvu da cunflitti di fusione cù un gran numaru di schedarii cambiati. Ci hè da nutà quì chì in u prucessu CI, i cambiamenti di versione sò automaticamente cù i cambiamenti di funziunalità, è micca in modu separatu.
Novità
Per un tempu ci calmu è, essendu rassegnati, avemu campatu cusì finu à chì i picciotti di Partendu da a versione 3.5.0-beta-1, Maven ùn hà micca include supportu per i chjamati "placeholders". L'essenza di questi sustituti hè questu pom.xml invece di una indicazione specifica di a versione di u prugettu, i variàbili sò usati ${revision}, ${sha1} и ${changelist}. I valori di sti pruprietà stessi sò stabiliti sia in l'elementuPruprietà>, o ponu esse definitu attraversu una pruprietà di u sistema
mvn -Drevision=2.0.0 pacchettu pulito
I valori di pruprietà di u sistema anu a precedenza annantu à i valori definiti inPruprietà>.
Parente
4.0.0
org.apache
apache
18
org.apache.maven.ci
ci-parent
Prima CI Friendly
${revision}${sha1}${changelist}
...
1.3.1
-STANTANEA
Discendente
4.0.0
org.apache.maven.ci
ci-parent
${revision}${sha1}${changelist}
org.apache.maven.ci
ci-figliolu
...
Se vulete custruisce a versione 2.0.0-SNAPSHOT, allora solu aduprà
mvn -Drevision=2.0.0 pacchettu pulito
Se vulete fà una liberazione, allora solu resettate SNAPSHOT
mvn -Dchangelist= pacchettu pulito
* L'esempii sopra sò pigliati da nant'à u situ web di Maven Apache Project
A dura realità
Tuttu hè bonu è sanu, hè ora di sente un sensu di satisfaczione, ma micca. Risulta chì stu metudu ùn funziona micca per installà è implementà, postu chì ùn serà micca rimpiazzatu in e descrizzioni di l'artefatti publicati in u repository. ${revision} nant'à u so significatu è maven ùn capirà più ciò chì si tratta.
org.apache
apache
${revision}
Una luce à a fine di un tunnel
Avemu bisognu di circà una suluzione à u prublema. Puderia salvà a situazione . Stu plugin risolve tutte e variàbili in u pom, ma à u stessu tempu tagliate assai altre infurmazione chì hè necessariu solu durante l'assemblea è ùn hè micca necessariu quandu importa l'artifacti publicati in altri prughjetti. U plugin hè ancu "straightens out" tutte e dipendenze parenti-figlioli, è in u risultatu, avete un pom flat chì include tuttu ciò chì avete bisognu. L'inconvenimentu era chì tagliava troppu "extra", chì ùn ci cunvene micca in tuttu. Dopu avè studiatu l'infurmazioni nantu à u sviluppu di stu plugin, hè risultatu chì ùn simu micca i soli in l'universu, è in l'aostu 2018, una pull-request hè stata creata nantu à Github in u repository di plugin cù u desideriu di fà pussibule. per determinà nantu à a nostra manera di "spoil" pom.xml. I sviluppori ascultò a voce di quelli chì soffrenu, è digià in dicembre, cù a liberazione di a nova versione 1.1.0, un novu modu, resolveCiFriendliesOnly, apparsu in u flatten-maven-plugin, chì era più adattatu chè mai - abbanduneghja. pom.xml cum'è, eccettu per l'elementu è permette ${revision}, ${sha1} и ${changelist}.
Aghjunghjendu un plugin à u prugettu
org.codehaus.mojo
flatten-maven-plugin
1.1.0
veru
risolve CiFriendliesOnly
appiattà
prucessu-risorse
appiattà
appiattà.pulita
pulita
pulita
Fattu!
Felice fine
Da avà, per cambià a versione di u prughjettu sanu è chì tutte e dipendenze cunnoscenu, avemu solu bisognu di edità l'elementu.rivisione> solu in a radica pom.xml. Micca centu o dui di sti schedari cù u listessu cambiamentu arrivanu à a rivista, ma unu. Ebbè, ùn ci hè bisognu di utilizà versions-maven-plugin.
Source: www.habr.com
