Meer met Maven – Moving Forward

In elke editie zal Robert Scholte een probleem voorleggen en deze oplossen met behulp van Apache Maven om meer inzicht te geven in Maven zelf en de vele beschikbare plugins.

Welke versie van Java mogen we minimaal eisen van onze gebruikers? Dat is een vraag die elk jaar wel weer op de mailinglijst voorbij komt als we het hebben over de requirements voor Apache Maven. Enerzijds wil je een zo groot mogelijke groep van developers tegemoet komen, wat betekent dat je voor een zo laag mogelijke versie moet kiezen. Anderzijds wil je gebruik kunnen maken van features die aan nieuwere versies van Java toegevoegd zijn.

Op dit moment is de mening, dat we de laatste EOL verklaarde Java versie vereisen als minimale versie. En aangezien in april 2015 Java7 de EOL status zou krijgen, werd met meerderheid besloten om dit de nieuwste requirement te maken voor Maven 3.3 . Persoonlijk zou ik liever de 3 meest recente versies van Java willen ondersteunen als runtime, oftewel pas Java7 vereisen als Java9 officieel gereleaset is.

Dezelfde discussie geldt voor de Maven plugins: welke versie van Maven mogen we tegenwoordig minimaal eisen van onze gebruikers? We zijn van mening dat ondertussen iedereen over zou moeten zijn naar Maven3. Voor zover ons bekend werken alle plugins ondertussen prima met Maven3.

Hervé Boutemy, chairman voor Apache Maven, heeft deze onderlinge afhankelijkheden in kaart gebracht voor zijn eigen presentaties op Devoxx France en ApacheCon Europe (zie tabel). Er zit één opvallend detail in: zowel Maven 3.0.x als Maven 3.1.1 vereisen minimaal Java5 als runtime. Alle Maven 3.x plugins moeten minimaal compatible zijn met Maven 3.0, maar vereisen daarbij wel minimaal een Java6 runtime. Oftewel: als je Maven 3.0/3.1 gebruikt én je wilt Maven 3.x plugins gebruiken, dan moet je minimaal Java6 als runtime hebben. Normaal gesproken een haalbare eis, alhoewel vaak blijkt: hoe groter de organisatie, des te lastiger zijn dit soort eisen om te upgraden.

 

 

 

Op dit moment zijn we in een fase beland, waarbij de laatste Maven2 compatible plugins worden gereleaset en de eerste plugins geprepareerd worden als Maven3 only.

Voor de plugins die ontwikkelt zijn door het Maven team zal een nieuwe conventie aangehouden voor het versienummer: de major zal overeenkomen het de minimaal vereiste versie van Maven. Met andere woorden: alle plugins die minimaal Maven3 vereisen, zullen als versienummer 3.x(.x) krijgen. Hiermee komen we de community tegemoet die het lastig vindt om te achterhalen welke plugins wanneer gebruikt mogen worden. Dit houdt in dat voor een aantal plugins van 1.x naar 3.x wordt gesprongen. Daarnaast zijn er ook al een aantal plugins, die al de versie 3.x hebben (zoals de maven-compiler-plugin en maven-site-plugin). Deze zullen versienummer 3.x blijven houden.

Voor plugin ontwikkelaars, die willen weten hoe we ervoor gaan zorgen dan er geen gebruik meer gemaakt wordt van Maven2 legacy code, is een wiki-pagina[1] opgesteld waarin de aanpak stap voor stap uitgelegd wordt.

Tot slot een tip: we gaan deze major upgrade ook gebruiken om deprecated code en parameters te verwijderen, dus let alvast goed op of je daar nu nog gebruik van maakt.

[1] https://cwiki.apache.org/confluence/display/MAVEN/Plugin+migration+to+Maven3+dependencies (of http://s.apache.org/XGL)