setup-maven-plugin stage one

maart 17, 2009

Het zal ondertussen een kleine handvol projecten en werkgevers zijn, waarbij ik heb geholpen om projecten met behulp van Maven op te zetten. Maar elke keer blijkt wel weer, dat de drempel vrij hoog is. Dat bracht me op het idee om een plugin te introduceren, die helpt bij het assisteren van een aantal handmatige aanpassingen.

Een praktijkvoorbeeld: Voor het introduceren van Maven binnen een organisatie zijn tal van zaken te bedenken, die het ontwikkelproces kunnen ondersteunen. Eén van de eerste zaken die ik voor elkaar probeer te krijgen is het plaatsen van een repository binnen het netwerk. Ondertussen gaat mijn voorkeur uit naar Nexus, maar om daar gebruik van te kunnen maken moet je minimaal één van je settings.xml-bestanden aanpassen. Als je voor het eerst  maven in handen krijgt en je moet direct zelf sleutelen aan wat bestandjes dan geeft dat natuurlijk te denken. Gevolg is dan ook vaak, dat je bij iedereen even langsloopt om even nog iets aan de passen. Het zou kunnen suggereren, dat je eerst Maven door en door moet kennen wil het toegevoegde waarde hebben.

Het lijkt dus tijd voor het ontwikkelen van een setup-maven-plugin. De eerste implementaties liggen momenteel al klaar met de nodige tests. Daarbij is het mogelijk om “statische” settings-bestanden te installeren (hmm misschien toch niet een al te slimme woordkeuze). Er wordt onderscheid gemaakt tussen globale en user-settings, er kan vanaf het bestandssysteem of via een URL een bestand ingelezen worden. Deze settings kunnen eventueel gecombineerd met de reeds aanwezige settings of juist overschreven worden.

In de planning staan sowieso nog de volgende uitbreidingen:

  • “Dynamische” xml-bestanden: bestanden met variabelen die gefilterd worden door systeemproperties, externe property-bestanden of meegegeven parameters.
  • Interactieve verwerking, zodat tijdens het verwerken vragen aan de gebruiker gesteld kunnen worden
  • Multi-setup. Bovenstaande functionaliteiten gaan nog steeds uit van 1 (settings)-bestand per keer.  Het zal echter ook mogelijk moeten om meerdere bestanden te installeren.
  • Light-weight implementation: op dit moment ligt de nadruk vooral op een werkende plugin. Echter zal het uiteindelijk één van de eerstgebruikte plugins moeten worden. In dat geval zou het erg prettig zijn als zo min mogelijk dependencies binnengehaald hoeven te worden.

Mocht iemand nog op dit vlak ideeën hebben, laat gerust een bericht achter. Met name als ze berusten op praktijkvoorbeelden. Het gebruik moet zo basic mogelijk gehouden worden, aangezien potentiele gebruikers waarschijnlijk niet al te veel ervaring met maven zullen hebben. Het moet dus absoluut geen zwitses zakmes worden. Er liggen dus nog genoeg uitdagingen te wachten.

Advertenties

First release as QDOX-developer

februari 2, 2009

Al met al is het ineens heel snel gegaan. ruim een maand geleden had ik nog nooit gehoord van qdox, maar ondertussen ben ik lid van het team en is er dit weekend een release vrijgegeven.

Hoe het allemaal begon… het bedrijf, waar ik sinds november 2008 aan de slag ben, maakt gebruik van de Google Webtoolkit voor het genereren van html-pagina’s op basis van java-code. Ondertussen was ik bezig geweest met het introduceren van Maven2, een projectbuildmanager wat het ontwikkelproces helpt te begeleiden. Het leuke eraan was, dat daarvoor ook een gwt-plugin beschikbaar is. Uiteraard bekeken wat er met deze plugin allemaal mogelijk is. Eén van de interessante features is het laten genereren van Async-classes. Daarbij wordt op basis van een ServiceInterface een bijbehorende asynchrounousInterface gegenereert. Deze bleek helaas niet krachtig genoeg als de gebruikte objecten te complex werden door gebruik van generics. Dit bleek een missende feature in 1 van zijn dependencies (te weten Qdox) te zijn. Er was in 2004 al een issue voor aangemaakt en sindsdien nog niet opgelost. Mijn conclusie: of het is niet mogelijk, wellicht toch erg ingewikkeld of er is geen interesse voor. Het laatste kon ik me niet voorstellen. In ieder geval klonk het als een leuke uitdaging.

Eind december ben ik hier maar eens voor gaan zitten en uiteindelijk heb ik het voor elkaar gekregen. Met zeer overzichtelijke wijzigingen heb ik een flinke patch aangeboden. Echter was net de week ervoor een release geweest, dus zou het waarschijnlijk nog wel even duren voordat deze patch doorgevoerd zou worden. Om een release te bespoedigen heb ik gekeken of er nog andere interessante issues tussen zaten (ik had immers al redelijk wat code onder ogen gehad).  Ik heb zo nog een aantal patches aangeleverd. Totdat opeens er een uitnodiging in de mailbox lag met de vraag of ik deel uit wilde maken van het QDox-developersteam. Uiteraard ‘ja’ op gezegd en niet veel later werd deze uitbreiding bekend gemaakt.

Nadat ik alle rechten toegewezen had gekregen om ook zelf code te committen ben ik afgelopen vrijdagavond voorzichtig begonnen. Al vrij snel kreeg ik een mailtje van Paul Hammant, die al doorhad dat ik aan het committen was. Vervolgens was zijn vraag of we een paar uurtjes konden besteden om alle patches door te voeren en overige issues te valideren. Gelijk een uitnodiging aan alle developers gestuurd om op het irc-kanaal te verzamelen. Tegen middernacht het overgrote deel van de issues kunnen afhandelen.
De zaterdagavond waren we weer met een aantal developers online en werd voorgesteld om direct een nieuwe release uit te rollen. Ik had andere verplichten die avond, maar de volgende ochtend zag ik een mailtje voorbijkomen, dat de release vrijgegeven is.

Toch erg verrassend wat er binnen een maand allemaal kan gebeuren. Ineens maak je deel uit van codehaus-opensource developementteam en rolt er in notime een verse release uit inclusief code van jouw hand.