Poslední měsíc jsem strávil konverzí hromady Ant skriptů do Mavenu, cítím se tedy kvalifikován trochu si do Mavenu rýpnout. Předem chci upozornit, že si myslím, že Maven je nejlepší nástroj ve svém oboru dostupný pod open source licencí. Jenže jak kdosi chytrý řekl, to že je něco nejlepší ještě neznamená, že je to dobré.
Nedostatečná dokumentace
Asi největší chyba Mavenu je mizerná dokumentace. Trochu to zachraňuje volně dostupná kniha „Better builds with Maven“. I stránky projektu se za poslední dobu zlepšily. Stále ještě ale nejsou na dostatečné úrovni. Pokročilejší témata člověk musí hledat po různých konferencích a hlavně ve zdrojovém kódu. Ten stojí opravdu za to. Pokud někdo chcete vidět zdrojáky bez kousku JavaDocu, podívejte se do Mavenu. To je velká chyba, podle mě to hodně brání většímu zapojení komunity.
Špatná úroveň pluginů
Pluginy jsou to, na čem Maven stojí. Často je to ale i tím na čem Maven padá. Není neobvyklé, že plugin spadne a vyhodí kryptickou výjimku, z které člověk vůbec nepozná co se děje. Obvykle je chyba na straně uživatele, ale bez průzkumu zdrojových kódu je těžké přijít na to kde je a jak ji napravit. Často je také problém najít vhodný plugin na to, co zrovna člověk potřebuje. Pamatuji se, že když jsem hledal plugin na JAXB2, tak mi zafungoval až pátý nalezený.
Nekvalitní repository
Repository je další silná stránka Mavenu. Zároveň je to ale také jeho slabina. U projektů, které nejsou buildovány Mavenem je velká pravděpodobnost, že budou mít v repository špatná metadata. Zrovna dnes jsem narazil na to, že nejnovější hibernate-entitymanager závisí na verzi hibernate-commons-annotation, která není vůbec v centrálním repository. Tzn. není možné tuto knihovnu použít, aniž by člověk nestrávil nějaký čas hledáním, jak daný problém vyřešit. (V tomto případě použitím jboss repository.)
Na téma repository mám pár dalších příkladů. Oba se týkají Springu. Pokud se pokusíte zadat verzi Springu intervalem a ne přesnou, konkrétní verzí, tak vám Maven bude tvrdit, že nejnovější verze Springu je 2.0-m4. Může za to tento soubor. Stejně tak zamrzí, když se vám v IDE nezobrazí zdrojové kódy Springu, pokud nemáte závislost na celém Springu, ale jen na nějaké jeho části. Důvodem je zase nekompatibilní přístup autorů Springu a Mavenu.
Se všemi uvedenými problémy se člověk dokáže vyrovnat. Všechny ale dělají křivku učení hodně strmou. Pro člověka, který s Mavenem začíná a nemá nikoho kdo by mu pomohl, je neuvěřitelně těžké se přes počáteční obtíže dostat. Jediné čím se může utěšovat je to,že pokud je překoná, čeká ho kýžená odměna ve formě velké pomoci s build procesem.
No nejsi jediný, kdo si na Maven v tomhle ohledu stěžuje. Na java konferenci se nedávno propíralo to samé.
Já jsem moc problémů s Mavenem neměl – je fakt, že většinou potřebuju jen ty “standardní” a často používané věci. Ani do zdrojáků jsem nemusel, takže se trošku hrozím toho, co tu píšeš.
Co se mi však líbí, že se nám díky tomu podařilo standardizovat a konsolidovat knihovny ve firmě a ulehčit jejich build/nalezení/verzování/použití. Původně se vše buildovalo antem a můžu říct, že po pár letech se to dostalo do stavu “neřízeného” chaosu.
Ant prostě nevyžaduje žádná pravidla a formálně nastavená pravidla prostě nemají šanci.
Už jen to za to popsané trápení s Mavenem podle mého názoru stojí.
Ano, naprosto s autorem souhlasím. Při vytváření Maven projektů často trpím při hledání nějaké dokumentace, pluginů nebo při řešení závislostí.
Ale pokud si s tím člověk dá tu práci a věnuje tomu čas, pak je Maven naprosto skvělý!
Chtěl jsem se jenom zeptat jakým způsobem souvisí ta nejnovější verze springu s uvedeným souborem, je to tím, že tam není vyjmenovaná, nebo proč?
Moje reakce na Maven jsou poněkud rozporuplné. Poslední dobou si s ním hraju na testovacím projektu a na jedné straně narážím na spoustu nedodělků a na druhou se mi moc líbí práce s dependencies. Zejména M2 plugin do eclipse je výborný. Zatím se mi ale ale nepodařilo automaticky buildnout SWT aplikaci. Práce s nativními dependencies by chtěla ještě hodně doladit. Profily jsou sice príma věc, ale… SWT knihovny navíc perzistentně odmítají zařadit na ibiblio což věci značně znesnadňuje. No co se dá dělat.
To 3rojka: přesně tak, tím že je tam nejvyšší verze 2.0-m4 tak si Maven myslí, že žádná novější není. Když mu řeknu aby použil verzi 2.0 a vyšší, tak si s tím neumí poradit.