pondělí 4. února 2008

Maven je dobrej

Minulý týden proběhla javovskou sférou debata o tom, jestli je Maven tím pravým nástrojem. Pročítáním různých reakcí jsem nabyl dojmu, že všichni si najednou chtějí kopnout do Mavenu. My již nějaký čas na Maven používáme, takže to mohu hodnotit z vlastního praktického pohledu. Mezi nejčastější výtky patří následující oblasti.

  • špatná metadata v centrální repository
  • příliš ukecaný POM jako zdroj metadat
  • tranzitivní závislosti
  • nerozlišování mezi JAR a projektovou závislostí
  • malá podpora v IDE
  • špatně spravované pluginy

Špatná metadata v centrální repository, v kombinaci s tranzitivními závislostmi, jsou příčinou hodně problému a způsobují u mnoha vývojářů velkou nechuť k používání Mavenu, řešení viz článek Závislosti v Mavenu. Tranzitivní závislosti považuji za velice přínosnou vlastnost, ale chápu, že někomu by přišlo lepší pracovat úplně bez nich.

Špatná metada v centrální repositoři nejsou chybou Mavenu, ale jejího správce. To stejné platí i pluginy, tvůrci Mavenu mohou garantovat funkčnost základních pluginů. Vždy záleží jenom na vašem rozhodnutí, jaký plugin a v jaké verzi použijete. Stejně jako mnoho jiných "nevýhod" je to spíše o tom, že je potřeba ustanovit nějaká pravidla, nebo chceteli štábní kulturu, jak Maven používat.

POM jako zdroj metadat. Po pravdě tuhle poznámku moc nechápu, v čem by to asi bylo lepší popsat, že by v něčem méně strukturovaném? Rozlišení mezi takzvanou JARovou a projektovou závislostí považuji osobně za jednu z nejvíce kontroverzních vlastností Mavenu. Zde je problém, že se to v různých kontextech chová různě. Různě se to chová, když pustíte buildování projektu v kořeni multiprojektu a nebo v jednotlivých subprojektech. Každopádně to není žádná raketová věda a nakonec se to vždy chová podle stejného scénáře pro daný kontext.

Malá podpora v IDE. Zde jsou dvě varianty podpory, generování projektových souborů a nebo přímá itegrace Mavenu do vývojového prostředí. Jako uživatel Eclipse jsem plně spokojen s první variantou. Můj pohled může být zkreslen faktem, že nevytvářím UI, takže nepotřebuji dělat hot deployment a další činnosti, které mnoha vývojářům stěžují život a otevírají pole působnosti pro designery vývojových nástrojů.

Osobně bych se po několikaleté zkušenosti s Antem a několikaměsíční zkušenosti s Mavenem k Antu nevrátil ani za nic. Tisíckrát omílaný rozdíl je v tom, že v Antu programujete, kdežto Mavenem popisujete projekt , alespoň ve většině případů.

Nad to oceňuji fakt, že ať vlezu do jakékoliv komponenty našeho systému, tak mám jistotu, že příkaz mvn test mi spustí testy, příkaz mvn compile mi provede kompilaci. Prostě chování každé komponenty je z pohledu prjektového managementu stejné. Těch výhod by se dala najít celá řada např. centralizování závislostí a nastavení, standardizovaná projektová struktura, zajímavé reporty (code coverage, statická analýza kódu atd.) atd. Samozřejmě to vše mohu mít v Antu také, ale strávím tím asi o polovinu více času a po pár měsících to bude celé neudržovatelné.

Jak se říká: kdo chce psa bíti, hůl si vždy najde a to tak nějak platí i pro Maven. Maven má svoje nevýhody, asi jako každý jiný nástroj, ale nic lepšího tady zatím nemáme. Takže moje resume zní Maven je dobrej.