= ~FlyingAnt =

Bei diesem Projekt handelt es sich um ein von mir entwickeltes ApacheAnt Buildskript, das alle meine Probleme bei der Bearbeitung von einfachen Projekten löst. Es bringt Ant das fliegen bei... :-)



== Entstehungsgeschichte ==

In verschiedenen Projekten habe ich immer wieder die gleichen Aufgaben gesehen, die mein build-Skript erledigen musste. Natürlich habe ich diese Skripten immer mal wieder in Feinheiten verbessert, wenn mir etwas aufgefallen ist. Habe ich dann etwas später an einem anderen Projekt gearbeitet, habe ich mich dann meistens irgendwann geärgert, weil ich dort den Fehler schon wieder bzw. das neue Feature nicht eingebaut hatte...

Irgendwann reifte in mir die Erkenntnis, daß ein gutes Ant-Skript ein Projekt für sich ist. Man kann natürlich sagen, daß sowieso jedes Projekt sein eigenes, individuell angepasstes Skript benötigt, aber auch hierauf kann ~FlyingAnt Rücksicht nehmen.

Ein ähnliches Projekt ist übrigens [Maven] (Wenn ich das richtig verstanden habe, hat Maven als Ant-Skript angefangen).

Wer die Idee einer solchen "eierlegenden Wollmilchsau" nicht mag, kann den Quelltext hier natürlich immer noch als Quelle der Erkenntnis verwenden. Alleine als Sammlung von "Standard-Targets" ist das vielleicht schon keine üble Sache.



=== ~FlyingAnt 1 ===

Die erste Version war ein Skript, das sich selber anhand einer Template-Engine aus mehreren Quelltext-Dateien zusammensetzte. So wurde abhängig von einer minimalen Konfiguration und von der Untersuchung der Umgebung (habe ich ein test/-Verzeichnis, so gibt es targets für Unittests) ein individuelles Skript zusammengesetzt. Hierbei konnten einzelne Templateteile aus einem individuellen Verzeichnis geladen (überladen) werden. Das Skript basierte natürlich sehr stark auf der Ant-"Sprache", wobei diese mich fast zur Weissglut getrieben hat. Alle dynamischen Elemente wurden im "ersten Pass" von der Templateengine bearbeitet. So ist die eigentliche Sprache, die ich benutzt habe, die ~FreeMarker Template-Sprache.

Mit diesem Skript habe ich erfolgreich eine Reihe von Projekten bearbeitet. Zu Beginn konnte es sowohl Web- als auch Swing- bzw. Konsolenapplikationen bearbeiten. Die Teile für die Webapplikationen wurden jedoch von mir lange nicht benutzt und laufen evtl. nicht mehr rund mit dem Rest zusammen.

Dieses Projekt existiert natürlich auch noch, obwohl die Webseite beim Einbruch verschwunden ist. Wer noch Interessie hieran hat, kann sich bei mir melden. -- Thomas Bayen



=== ~FlyingAnt 2 ===

Im Frühjahr 2009 hat man meinen Keller ausgeräumt und u.A. meinen Subversion-Server mitgenommen. Das hat mich dazu gebracht, die Grundstruktur einiger meiner Projekte neu zu überdenken. Ich dachte daran, ein ordentliches Projektmanagement aufzubauen und wollte nicht immer alles für mich alleine erfinden. So kam ich darauf, [Maven] auszuprobieren. Nach einiger Zeit merkte ich jedoch, daß dieses viel zu schwerfällig, unflexibel und zu schlecht dokumentiert für meine Probleme ist. Wer damit irgendetwas erreichen will, was nicht genau so vorgesehen ist, muss ein riesiges Rad drehen...

In dieser Zeit las ichein Buch über [Groovy] und erkannte schnell, daß das die Lösung meiner Probleme ist: Die Einfachheit von Ant mit der Dynamik von Groovy (siehe auch AntGroovyIntegration). Also begann ich, die Fähigkeiten der alten Templates in ein einziges, Groovy-gespicktes Skript zu übersetzen. Dabei liess ich einige Dinge (vorerst) fallen, die ich im Moment nicht benötige (z.B. die Tomcat- bzw. Webapp-Unterstützung). Dafür baute ich neues ein, was ich von Maven gelernt hatte (Abhängigkeitsverwaltung mit Ivy).



== Features ==

* '''Konfiguration durch Konvention''' (die meisten Einstellungen finden sich von alleine)
* standardisiertes '''Dateilayout''' (anders als dieser Maven-Blödsinn, aber auch das könnte man unterstützen)
* Beachtung von '''Unittests'''
* automatisches Nachladen von JAR-File-'''Abhängigkeiten''' (keine Binaries in der VersionsVerwaltung)
* Selbstladen von Ivy, Groovy, etc. (keine Binaries im Projekt)
* Erzeugung von '''Javadoc'''-Dokumenten in HTML
* automatische Generierung einer lokalen '''Projekt-Webseite''' mit Javadoc und individueller Dokumentation
* '''hochladen''' der Webseite auf einen Webserver
* '''Abschalten''' von bestimmten Teilen möglich (Ivy nicht jedes Mal starten)



== Stand der Dinge - Ausblick ==

~FlyingAnt 2 ist im Moment noch im Betastadium, d.h. es läuft bei mir in drei Projekten. Wer Interesse hat, es für ein eigenes Projekt mitzubenutzen und mir Feedback zu geben, kann das gerne tun. Wie die Menschen so sind, sind meine drei Projekte alle in etwa ähnlich aufgebaut. Was fehlt ist, daß mal jemand etwas beisteuert, der mal ganz anders denkt.

Wer damit arbeiten möchte, spricht mich am besten erstmal direkt an: ThomasBayen

Einen Einblick gibts z.B. in meinem Projekt [bayenutils|http://bayenutils.javaproject.de]. Eine eigene Projektwebseite für ~FlyingAnt gibts noch nicht wieder.



Was ich definitiv noch einbauen möchte:

* Bearbeitung von Abhängigkeiten von Schwester-Projekten (sowas wie Module)
* Webapplikationen (wenn ich dazu Zeit finde)
* Webseiten-Templates als JAR-File fix und fertig (sozusagen ein "Theme")
* Target, um ein neues, leeres Projekt zu erstellen (unter Beachtung aller meiner Konventionen)
* Integration mit Eclipse (abhängige JARs in Klassenpfad bringen)


----
[{Tag Java Groovy}]