pondělí 14. dubna 2008

Maven 2.0.9 - fixní verze CORE pluginů

Jednou z často vyčítaných chyb Mavenu, byla nereprodukovatelnost buildu, způsobená nekonzistencí ve verzích pluginů použitých v rámci buildu. Maven 2.0.8 a starší používal pro build vždy nejnovější aktuálně dostupnou verzi pluginu v lokální repository. Takže jste mohli v závislosti na stavu lokální repository mohli dostat rozdílné výsledky buildu.

Řešení tohoto problému existuje, ale úplně neškáluje a není to moc uživatelský přívětivé, a to uvádět v centrálním (rodičovském) POMu verzi použitých pluginů. Release 2.0.9 tento problém řeší zafixováním verzí CORE pluginů přímo v distribuci Mavenu (viz element pluginManagement v super POMu). Tím je zaručené, že minimálně na stejném releasu Mavenu (platí pro 2.0.9 a výše) budou stejné verze CORE pluginů a tímto nepoškozena reprodukovatelnost buildu. Zároveň díky dědičnosti platí, že pokud budete mít v centrálním POMu definované vlastní verze CORE pluginů, tak tyto budou mít přednost.

Samozřejmě nemusíte používat pouze CORE pluginy, takže doporučovaná strategie s definicí v centrálním POMu je stále platná. Tuto změnu bych nazval jako takový smart default. Kompletní popis najdete v článku 2.0.9 brings a bit of stability to plugin versions, ze kterého jsem čerpal i já.

Další větší změnou je možnost importování dependency managementu z různých POMů. Dependency management slouží k deklaraci použitých dependencí. Díky tomu je možné shromáždit všechny dependence včetně jejich verzí na jednom místě. Před releasem 2.0.9 nebylo možné definovat dependency management jinak než dědičností mezi POMy. 2.0.9 verze definuje nový dependency scope import, diky kterému je možné importovat dependency management z různých POMů. Pokud je pro vás tento popis příliš abstraktní pokračujte článkem Importing Managed Dependencies.

Jinak doporučuji přečíst release notes, protože těch záplat a drobných vylepšení je celkem dost.