[Grails eXchange] Session A Groovy Build System with Gant (Russel Winder)
Russel Winder zeichnet verantwortlich für Gant, das Pendant zu Ant und/oder Maven in Groovy. Grails macht reichlich Gebrauch von Gant: Alle Skripte wie etwa create-domain-class
sind in Gant geschrieben.
Russel vergleicht Gant mit Rant/Rake, Ant, Maven, Scont und anderen Build-Sprachen. Seine Meinung ist, dass Gant, Rant (Ruby) und Scont (Python) werden die Gewinner sein in der Evolution der Build-Sprachen. Beispielsweise sind Sie internal DSLs, während Ant und Maven lediglich external sind, was Gant/Rant/Scont entsprechende Vorteile gibt.
Probleme mit Ant: Russel präsentiert eine Folie, auf der "Low level", Too declarative" und "No programmable target generation steht", und diese Punkte sind verteilt unter sechs Punkten, die da "XML" heißen. Man gewinnt den Eindruck, Russel mag kein XML. Laut Russel ist XML gut, um Daten zu repräsentieren, aber Ant und Maven repräsentieren eben nicht nur Daten, sondern eine komplette Build-Spezifikation. Allerdings wird Maven gelobt für seine Projektstruktur, welche als Standard daherkommt für alle Mavenprojekte.
Gant wird vorgestellt an einem Beispiel. Es geht um eine Javaprogramm: Hello World. Es ist wirklich nur eine Klasse mit einer Main-Methode, die den bekannten String ausgibt. Jetzt zeigt Russel die Build-Spezifikation in Ant auf einer Folie, allerdings schon arg gequetscht, so viele Klammern sind da drin. Es sind nur drei Targets: compile, test und clean. Dann komen vier Seiten Maven: Wahnsinn, was Maven so alles haben möchte (unter anderem jede Menge Zeugs über denjenigen, der für das Build-Skript verantwortlich ist, einschließlich der E-Mail-Adresse! "Just to blame somebody if the stuff not builds!"). Es scheint da wenig Default-Einstellungen zu geben; vieles muss explizit gemacht werden. So muss der Compilelevel (1.6) angegeben werden. Nee, sieht nicht gut aus, Michael ;-) Dann kommt Gant: auch eine Seite, allerdings ist die Schrift doppelt so groß wie bei Ant.
Das nächste Beispiel ist ziemlich cool: Das Gant-Skript stellt auf eindrucksvolle Weise dynamisch (!) Targets her. Alle LaTeX-Files aus einem bestimmten Verzeichnis können nach PDF übersetzt werden, da jeweils ein Target für ein File bereit gestellt werden. Das kann man nicht mit Ant schaffen. Auch nett: durch GStrings kann man einfach aussagekräftige Beschreibungen von Targets erstellen. Schonmal versucht, in einer Ant-Description eines Targets eine Variable auszuwerten, damit's sprechender wird? Viel Spaß damit...
He, Stefan, das will ich mir mal genauer anschauen für unser Buch. Ich wußte bislang nicht, dass Gant auch mit LaTeX kann, sogar ein eigenes Package dafür besitzt. Will Russel mal nach der Session drauf ansprechen.
Russel operiert da vorne gerade auf einem Uralt-PC mit Linux, weil sein Nagelneu-PC nicht mit dem Uralt-Beamer hier im Raum spricht. Es ist alles improvisiert, aber Russel macht eine gute Figur: Emacs-Hacker, wie er im Buche steht :-)
Zuletzt geht Russel auf die Einsatzmöglichkeiten von Gant ein: Ant zu ersetzen, dafür ist Gant gemacht worden, und Ant mit Gant zu ersetzen sei ein No-Brainer. Maven mit Gant zu ersetzen ist schon etwas schwieriger, aber möglich. Er geht da gerade näher drauf ein, aber ich verstehe nichts von Maven und damit auch nicht, wie das mit Gant gehen soll. Was ich mitbekomme habe ist, dass Gant eigene Maven-Targets mitbringt und so die Migration relativ einfach sein soll.
Netter Vortrag. Brachte mich auf Ideen. Gant, auf jeden Fall einen tiefergehenden Blick wert, auch für Java-Projekte!