Build script
Ez volt a leggyakoribb. Az ötlet annyi, hogy amikor buildelsz, akkor generáljon neked egy számot bele egy file-ba, amit valószinűleg besúvaszt utánna a classpath-ra. Ezt persze csak inkrementálgatni kell. Láttam olyat, hogy ez a file csak úgy "floating around" azaz akik release-t csináltak azok tudták a számozást, aztán volt olyan hogy visszakommitolták legalább időnként a verziókövetőbe. Ja még ezen belül is két különböző műfaj van, van aki verzió számot tart számon, van aki build számot. Szóval a kombinációk száma igen magas.
A tipikus elba:
- Amikor nincs meg a file a classpathon, akkor valami törik
- Elfelejted inkrementálni a build számot
- Elfelejted a verziószámot bepakolni a verziókövetőbe, mielött tegelsz
Database, config
Olyat is láttam, hogy az emberek a konfigurációba, vagy gyakrabban az adatbázisba írják bele, hogy mennyi a szoftver verziószáma. Az egyébként tetszik, hogy az adatbázisban valahol benne legyen az, hogy milyen patcheket hajtottak végre rajta és milyen verzió satöbbi a jelenlegi schema, de akkor most az operátorra bíztuk, hogy felülbuherálja a verziószámot.
Elba:
- Azon felül hogy anyukádat emlegetik közben, még rizikó tényező hogy az operátor valamikor visszacsinálja vagy átírja, vagy éppen ellenkezőleg: elfelejti átírni.
- Az fenti elfelejtések simán ide is passzolnak
SVN-way
Ezt én találtam ki és hát primitív mint a szerzője: Csinálj egy osztályt pl Version néven, tegyél bele egy final static String mezőt, aminek az értéke legyen ennyi: "$HeadURL: http://svn.blf.hu/fubar/trunk/src/main/hu/blf/Version.java $", plusz egy metódust, ami fubar és az src közül kibányássza neked ami ott van: pl ennyi: StringUtils.substringBefore(StringUtils.substringAfter(version, "/fubar/"), "/src/"), ne felejtsd el a végén az svn property-k között a keywords-be beleírni azt hogy "HeadURL".
A build numebert nyilván hanyagolja. Csak azt adjuk oda bárkinek is, amit szépen betegeltünk.
Jó, a nyilvánvaló hátrányok elött felsorolnám hogy miért szerettem ezt:
- Soha nem sikerült elszúrnom :) A Version osztály mindig valami értelmeset ad vissza. Pl azt hogy "trunk". A legdurvább elcseszés esetén semmit, de nem NullpointerException-t.
- A release során simán meg lehet róla feledkezni. A release nálam ennyi: mvn release:prepare release:perform (így "howto release" manuált se írtam soha)
- Ja és ez az egész substringes dolog csak a cicoma rajta, sima statikus text/html fileokkal is működhet, ha érti a felhasználód a HeadURL-t hogy mi az.
Akkor jöjjön a hátrány:
- Totálisan SVN függő - azért volt ilyen a CVS-ben is, de arra már kiemlékszik
- Az SVN-re meg most úgy fintorgunk mint a CVS-re úgy 6-7 évvel ezelött. Valahogy akkor jött ki az SVN, nem?
Még annyit a megoldás portolhatóságáról, hogy a git pl nemcsak hogy nem csinálja, de elvben is ellenzi. Linus Torvalds szerint írjál scriptet. Szerintem meg ... :-) Na mindegy, nekem ez nem tetszik, túlságosan könnyen elcseszhető. Meg bújja a git elba manuálját az, akinek nincs jobb szórakozása.
Ennyi... részemről
De kiváncsi lennék a ti tapasztalataitokra, linkeljétek vagy írjátok ide nyugodtan! Köszi előre is!
10 megjegyzés:
Nekem az a kedvenc megoldásom, hogy valami build script-be, vagy property fájlban ÉN írogatom a verziószámot kézzel release esetén.
Csak azért, mert szeretem őket elnevezgetni végül, ha már annyit dolgozok rajtuk.
Egyébként nagyon sok helyen találkozom azzal a problémával, hogy nincs kiírva sehova -még elrejtve sem- a verziószám. Erről lehet tudni, hogy felütötte a fejét a balfaszság a fejlesztőcsapatban.
No, innentől számolva a következő harmadik bejegyzésem pont ugyanez lett volna, most húzhatom ki a listáról. :) Gratula!
Az nem megoldás, ha úgyis Maven van (release-ből látom), hogy a Maven a {project.version} változó értékét beírja egy fájlba, akár egy forrásba, akár egy property fájlba, amit valaki olvas? Nekem mindig a pom.xml-ben lévő verziószám az elsődleges, és nem az SCM. Aztán ott van a Build Number Maven Plugin is.
Elnezest :) Attol meg nyomjad, lehetne egy korrekt, tragar es szleng szavaktol mentes bejegyzes.
Szoval nekem is ez a maven metainfos dolog a kovetkezo otletem. Ez az info mar most is ott van a Meta-inf alatt. Ez talan meg egeszen elcseszhetetlen megoldas lehet egyebkent, mert alapbol a pom mindig ott van a meta-inf alatt. Egyetlen okbol idegenkedek tole: amikor jetty-vel startolom fel a projectet, akkor is megvan? Lehet hogy korrekt csomagolas es ilyesmi kell neki?
Mind1, keritek idot hogy kitapasztaljam ezt az egeszet. Majd osszd meg a tapasztalataidat!
Maven jetty-run -nál nem helyettesítődik be a verziószám. (Nálam legalábbis az alap konfignál.) De ez nem túl fájdalmas dolog. Annyi, hogy amikor fejlesztek a verziószám placeholdert látom az alkalmazáson.
Igen, próbáltam én is ilyent, még JAR-nál, és mikor kicsomagolva futtatod, nem fér hozzá.
De nem arra gondoltam, hogy a meta-ból olvasol, hanem az, hogy csinálsz egy version.properties állományt, és abba a Maven build közben helyettesíti be a szöveget.
Az SVN eseteben van egy lehetoseg meg: a revizioszam. Ez mindig az a szam lesz, amibol a release build letrejott.
Nyilvan maven meg ant eseteben vajakolni kell, hogy ez mukodjon, de ezt viszont meg lehet csinalni - relative egyszeruen - gitre is, kulonosebb scripteles nelkul.
Gabor, ha a legutobbi modositas verzioszamat akarod tudni, az nem biztos, hogy menni fog. Egy file-ba csak az annak a file-nak a legutobbi modositasat teszi bele az svn, szovl a teljes forraskod fara ez nem mukodik.
Arra ugy valoban nem. Viszont en pl. ugy csinalnam, hogy a release folyamatban gyartanam a changelogot az svn log alapjan, ezt eltennem, es ennek a revizioja adna ki a verzioszamot. Ekkor mindig a legujabb lesz meg.
De amugy, ha jol tudom, svn release eseteben amugy is van egy svn copy a tags konyvtarba, es szerintem az itt letrejovo mappa revizioja a latest lesz, nem?
A Maven buildNumber plugin futtat egy "svn info" parancsot, az a teljes fára megmondja, hogy melyik revision-re update-eltél utoljára, és azt teszi build number-nek.
Most eljutottam ide is olvasasilag.
@Vician Istvan: igen, ez peldaul akar meg mukodhet is.
Git-nel meg lehet rev-parse -zal jatszani.
Megjegyzés küldése