Nedávno se objevila na stránkách Sonatype prosba o vyzkoušení Mavenu 3 RC1 (link). Cílem této prosby je snaha o stihnutí slibovaného termínu vydání Mavenu 3 k prvnímu říjnu 2010. Neváhali jsme tedy a vyzkoušeli, co se nám Maven 3 snaží přinést a co bude znamenat přechod ze stávající verze.
Novinky
Nejprve si projděme novinky, které si pro nás Maven 3 připravil:
- paměť problémů s artefakty – pro mě velice užitečná vlastnost; pokud dojde k problému při získávání nějaké závislosti projektu, Maven si uloží tento incident a při dalším buildu se již nebude repository dotazovat; tato cache je časově omezená a zneplatní se také v případě změny adresy repository (samozřejmě, že jde vymazat i ručně – ukládá se v lokální repository)
- rozdělení <repositories> a <pluginRepositories> – další velmi užitečná vlastnost; zatímco Maven 2 stahoval pluginy z obou lokací, Maven 3 striktně odděluje závislosti z klasických repository a z repositories pro pluginy; navíc v Maven 2 byly stahovány vždy nejnovější pluginy (pokud nebyla uvedena verze) – tedy i SNAPSHOT; nyní jsou stahovány pouze normální release pluginů a navíc Maven 3 doporučuje uvádět verzi pluginu u všech používaných pluginů
- úprava stahování tranzitivních závislostí – u Mavenu 2 se nám stávalo, že mnohdy špatně rozpoznal tranzitivní závislosti a to vedlo ke konfliktům ve verzích knihoven; Maven 3 slibuje zlepšení díky novému systému Aether
- původ knihoven – v lokální repository jsou nově uloženy informace, které určují odkud byly knihovny staženy (z jaké repository); to by mělo přinést lepší reprodukovatelnost buildů a dohledání případných problémů
- striktnější validace pom.xml souboru – XML soubor je nyní striktnější a upozorňuje na mnohem více chyb
- konec podpory legacy repository a profiles.xml – Maven 3 již dále nepodporuje legacy strukturu repository (zajišťující kompatibilitu s první verzí Mavenu) a také profily již nelze definovat mimo pom.xml či settings.xml (což jsme nikdy nepouživali, takže nevím jestli je to dramatická změna)
- změna ${pom.version} za ${project.version} a ${pom.artifactId} za ${project.artifactId} – celkem logická změna zástupné proměnné pro projekt
- site plugin – jelikož v rámci refaktorizace autoři odstranili generování Maven site dokumentace z jádra systému, tak je tento systém prozatím nefunkční (důvodem odstranění je možnost použití alternativních pluginů); na nové verzi site pluginu už se ale pracuje, takže náprava jistě nebude dlouho trvat
- mnohé další – Maven 3 přináší mnohé další novinky jako je například více procesorové zpracování apod.; podrobnější seznam naleznete zde
Kompatibilita
Jak sami autoři uvádějí, zachovat kompatibilitu se stávající verzí byla nejenže jejich priorita, ale také jeden z nejtěžších úkolů, které před nimi stály. Všichni si určitě pamatujeme, jak jsme přecházeli z Mavenu 1 na Maven 2 – jednalo se úplně odlišné nástroje a přechod nebyl jednoduchý. Proto nyní mile překvapí, že na většině projektů nemusíte měnit zhola nic – vše prostě funguje na výbornou.
Co rozhodně potěší je zlepšení logování Mavenu. Pokud nastane nějaká chyba či upozornění Maven na ni velmi konkrétně upozorní a tím pomůže jejímu rychlému odstranění – při přechodu z Maven 2 se jedná zejména o upozornění na duplicity definice repository, či verze pluginu. Při našich testech jsme se jinak s jinými typy problémů nesetkali (až na typ repository legacy, což Maven vyhodnotí jako chybu a přes ni není schopen přejít). Za úpravu zobrazovaných informací během buildu si tedy Maven 3 od nás odnáší velkou pochvalu.
Pokud byste přeci jenom měli nějaký problém například s kompatibilitou pluginů, zde je seznam pluginů a jejich stav vůči nové verzi Mavenu. Z toho seznamu nás prozatím nejvíce mrzí asi Selenium a site plugin (viz výše), který jsme s Mavenem na některých projektech používali. Snad se tento problém co nejdříve vyřeší.
Maven 3 a Hudson
Většina z vás jistě používá, stejně jako my, velmi silnou kombinaci Maven a Hudson pro průběžné integrační testování. Zajímalo nás tedy, zdali bude možné používat Hudson i s Maven 3.
Bohužel jak se zdá, tak si zatím Maven 3 s Hudsonem nerozumí – tedy mluvíme-li o přímé podpoře Maven 2 jobů. Pokud jsme zkusili vytvořit Maven job v Hudsonu s Mavenem 3, tak se build nepodařil a skončil chybou, na kterou lze narazit na JIRA Hudsonu (link). Pokud vytvoříte externí job, tak pak samozřejmě vše funguje bez problémů.
Blízká se ovšem na lepší časy – Maven 3 poskytuje nové API, které v budoucnu umožní lepší integraci Hudsonu a Mavenu. Díky tomu bude konfigurace jobů jednodušší a lehčeji spravovatelná (viz wiki Hudsonu). Autoři Hudsonu zatím argumentují tím, že Maven 3 není finální a API se může měnit – proto zatím jeho podpora není v aktuální verzi Hudsonu. Věříme ovšem, že se ji dočkáme brzy po uvedení konečné verze novéhu Mavenu. Něco málo o použití nového API v Hudsonu naleznete na této stránce.
Závěr
Maven 3 nás velice potěšil – ať už se jedná o perfektní zpětnou kompatibilitu, zlepšené logování a spoustu nových funkcí tak autoři odvedli dobrou práci a je vidět, že Maven posunuli opět o krok dál. Zatím zamrzí drobné problémy s pluginy, které mohou být překážkou v nasazení nové verze, ale věříme, že budou rychle odstraněny ve finální verzi, či krátce po jejím vydání. Podělte se s námi v diskuzi o vaše zkušenostmi s Mavenem 3 a s tím co se vám na něm líbí, či co vás trápí.
29.9.2010 at 09:09
Díky za upozornění. Po tragické betě1 jsem to pustil k vodě. Beta 3 je o dost dál, už mi většinu projektů přeloží. Je ale pomalejší (ne výrazně, ale trochu ano) a hlavně mě překvapilo kolik toho natahala. Mnohem víc artefaktů, nečekal jsem tak dramatický rozdíl.
beta 3
čas: +2%
mb: +53 %
art.: +19%
Měřil jsem to na svých 134 projektech. Beta3 stáhla o 1214 artefaktů víc.
Jaké zkušenosti s Mavenem beta3 máte? Taky vám toho tahá tolik? Jdu kouknout co to je za soubory, třeba jsou tam uložené zdroje artefaktu.
29.9.2010 at 16:11
Co se týče rychlosti, tak jsme nějaké dramatické zpomalení nezaznamenali – možná je mírně pomalejší, ale je to zase vyváženo lepším logováním.
Se stahováním více artefaktů jsem také neměl problém – je pravda, že při prvních buildech se toho stahovalo hodně, ale to byly nové verze pluginů apod. – potom to již bylo v pohodě.
Zkuste tuto RC1, s betou jsme neexperimentovali, takže nedokážeme posoudit.