Oliver Gierke Archive About Tags

Spass mit Maven Archetypes

22 April 2008

Wir führen in der Firma nach und nach Docbook als Dokumentationsstandard ein. Mit docbkx steht auch ein Plugin für unser Buildsystem Maven zur Verfügung. Nachdem ich die letzte Woche das Synyx CI in ein XSLT Stylesheet gegossen hatte, versuchte ich aus dem Proof of Concept Maven Projekt einen Archetype zu machen.

Archetypes sind Projektvorlagen in Maven mit denen man bei einem Projektstart on the fly eine Ordnerstruktur generieren und Konfigurationsfiles vorerzeugen kann. Dies verringert den Aufwandand die Infrastruktur einzurichten am Anfang eines Projektes erheblich.

Ein Archetype ist selbst wiederum ein Mavenprojekt, in dem die für ein neues Projekt notwendigen Dateien an eine Bestimmte Stelle im Archetypeprojekt gelegt werden und ein Archetypedeskriptor namens archetype.xml im META-INF abgelegt werden muss. Soweit die Dokumentation die hier zu finden ist.

Nun will das Archetype Plugin von Maven allerdings in den bereitgestellten Dateien typische Mavenplatzhalter wie ${version} durch Parameter ersetzen, die man beim initialisieren des neuen Projektes mitgibt. Es war nun schon nicht einfach herauszufinden, wie ich Maven aber dazu bringe diese Platzhalter einfach Platzhalter sein zu lassen. Nach einer Weile googlen fand ich dann heraus, dass das Dollarzeichen einfach escaped werden muss (\${version}). Dies funktioniert aber nur ab Maven 2.0.8.

Nachdem diese Hürde genommen war musste ich Velocity (was Maven benutzt um diese Platzhalter zu ersetzen) nur noch ausreden die TrueType Fontfiles für unsere Hausschrift zu parsen. Das Problem: für den Archetypedeskriptor gibt es weder DTD noch ein XSD. In den Untiefen des Nabble Forums stieß ich dann auf den Hinweis, das Attribut filtered="true" in den <resource /> Elementen würde genau dies bewerkstelligen.

Was ihr jetzt hier in knapp 5 Minuten gelesen habt, hat mich locker 3 Stunden gekostet^^. Jaja, Dokumentation ist manchmal eben doch hilfreich ;).

blog comments powered by Disqus
Fork me on GitHub