Posts Tagged ‘setup-maven-plugin’

So I started to work my mojo

juli 28, 2009

Hier het vervolg over de setup-maven-plugin, na mijn eerste en tweede blog, die ik hier al aan had besteed.

Ik had mezelf voorgenomen om deze zomer de plugin in zoverre af te ronden, zodat er eerst op geschoten kon worden. Eerst maar eens de reacties afwachten voordat ik begin met optimaliseren. Zo was ik ondertussen zelf al tegen een wat ongelukkig gekozen stukje implementatie aangelopen, dus die heb ik moeten herschrijven inclusief de bijbehorende tests. Ik was in staat om twee stappen tot één te combineren, waardoor het allemaal net wat efficienter werd.
Het leek me daarna tijd om de plugin aan te bieden, dus hiervoor heb ik een Jira-issue aangemaakt. Vervolgens heb ik eens gekeken hoeveel plugins er in de wachtrij staan. Hmmm, dat waren er 40. Ik moest dus wat extra’s verzinnen om deze plugin onder de aandacht te brengen. Aan collega’s met een jira-account heb ik gevraagd om te stemmen op de plugin. Daarnaast heb ik nog gesproken met Benjamin Bentmann, een developer waarvoor ik een aantal QDox-issues heb weten op te lossen. Hij is betrokken bij vrij veel codehaus- en apache projecten. Hij suggereerde om toe te treden tot het mojo-team. Dat zou de kans van slagen voor deze plugin tevens vergroten. Dus ik heb mezelf aangeboden en na een stemronde (ja, zo werkt dat nu eenmaal) mocht ik toetreden tot het team.

Maar wat betekent dit? Maven is een plugin-gedreven tool. Daarvoor heeft Maven een tweetal plekken waar hij standaard zoekt als de naam van een plugin niet volledig is uitgeschreven (soort van shortcuts). Allereerst wordt gezocht in de apache-plugin-repository. Als de plugin daar niet bestaat, wordt er gezocht in de codehaus-plugin-repository. Hierin staan de plugins, die geschreven en onderhouden worden door het mojo-development team. En daarvan ben ik dus sinds kort officieel lid.

O ja, nog even voor wie geinteresseerd is in de volledige quote van Austin powers

setup-maven-plugin stage two

juni 15, 2009

Afgelopen maart heb ik al een eerste aanzet gedaan voor een blogreeks over een nieuwe maven-plugin die ik aan het schrijven ben. Nu na ongeveer drie maanden zijn er tal van nieuwe features toegevoegd ten opzichte van het vorige artikel.

Zo is het ondertussen mogelijk om met zogenoemde dynamische xml-bestanden te werken. Dit houdt in dat de templates voor een specifiek xml-bestand expressies kan bevatten, welke via systeemproperties, externe propery-bestanden of meegegeven parameters gevuld kunnen worden. Dit klinkt misschien erg complex, dus zal ik het met een voorbeeld uitleggen.

<settings>
 <proxies>
 <proxy>
  <id>mycompany</id>
   <active>true</active>
   <protocol>http</protocol>
   <host>proxy.somewhere.com</host>
   <port>8080</port>
   <username>${proxy.mycompany.username}</username>
   <password>${proxy.mycompany.password}</password>
   <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
  </proxy>
 </proxies>
</settings>

In de bovenstaande template van een settings.xml zie je 2 expressies staan: ${proxy.mycompany.username} en ${proxy.mycompany.password}. Deze moeten natuurlijk per persoon verschillen. Er zijn 2 manieren om deze expressies van een waarde te voorzien:

Als extra parameter bij de plugin-call: Dit betekent, dat je de plugin als volgt aanroept
mvn setup-maven-plugin:global-settings -Dproxy.mycompany.username=Duke -Dproxy.mycompany.password=s3cr3t

Een tweede manier is om een bestand aan te maken (default naam is in dit geval settings.properties)

proxy.mycompany.username=Duke
proxy.mycompany.password=s3cr3t

Daarnaast is het ook mogelijk om systeemparameters in je template op te nemen, welke ook vervangen kunnen worden door de bijbehorende waarde.

Een andere feature die ik nog niet genoemd had, maar welke wel keurig in dit rijtje past zijn het ondersteunen van verschillende scm-settings. Het blijkt dat voor een aantal SourceControlManagement systemen aanvullende settings-bestanden ingesteld kunnen worden. Ook daar ben ik mee bezig geweest. Helaas is een deel hiervan nogal slordig opgezet, waardoor het niet mogelijk is om er goede tests voor te schrijven. Maar aangezien ze in de basis hetzelfde zijn, heb ik ze al wel geprepareerd. De volgende scm-systemen worden ondersteund: clearcase, cvs, git, svn, vss.

Tot slot is er een goal toegevoegd, waarmee je wachtwoorden geencrypt in je settings-security.xml kunt opslaan. Ook hiervoor zijn de bovenstaande filter-mechanismes beschikbaar.

Doel is momenteel om de code op te schonen en een aantal gelijke stukken code onder te brengen in eigen classes. Vervolgens zal de code aangepast worden naar de codehaus standaarden en is het deze zomer vast rijp genoeg om aan te bieden.

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.