Tag: Replace

Alles neu – alles einfach

Posted by – February 8, 2009

Hatte schon seit einiger Zeit vor mal rauszufinden, ob der Replace Task von Ant auch mehrere Zeilen auf einmal ersetzen kann. Also entweder ein Token durch mehrere Zeilen bzw. den Inhalt einer Datei zu ersetzen oder mehrere Zeilen als Token durch eine oder mehrere Zeilen zu ersetzen. Während das Ersetzen eines mehrzeiligen Tokens mittels replacetoken ganz gut funktioniert hatte ich so meine Schwierigkeiten mit dem Einfügen von mehreren Zeilen via Ant.

Ein kurzer Besuch bei Google hat mir die erste Idee bei devdaily.com gegeben, bei der mittels Schlüsse in einer Property-Datei ein einzelner Token durch mehrere Zeilen ersetzt werden soll. Um den Schlüssel auf mehrere Zeilen auszudehnen hat man dort  ${line.separator} genutzt, was allerdings bei mir nicht funktioniert hat. Warum-auch-immer wollte Ant (1.7) ${line.separator} nicht auflösen und daher war das Ergebnis nicht ganz so schön. Außerdem war mir auch nicht ganz klar, ob ich die einzelnen Zeilen auch (unterschiedlich) einrücken kann. Da die HTML Seiten auf meiner Homepage alle möglichst gleichmäßig eingerückt sind hab ich mir also was anderes überlegt.

Anstelle der Server-Side-Includes (SSI), die ich erst letztes Jahr eingeführt hatte, wollte ich ich Ant die Arbeit des Ersetzens erledigen lassen. Die SSIs waren damals auch nur die Notlösung gewesen, weil das mehrzeilige Ersetzen mit Ant noch nicht so wollte. Die Ant-Lösung finde ich deswegen schöner, weil ich hier ausschließlich statischen Inhalt einfüge, der sich niemals dynamisch ändert. D. h. alle Besucher bekommen vom Server den selben Inhalt zugespielt. Der Einsatz von SSIs ist für sowas zwar möglich aber irgendwie überflüssig, wenn ich schon vor dem Hochladen der HTML Dateien den Inhalt anpasse. Was ich also gemacht habe ist folgendes:

  1. Mittels LoadFile Task die bisherigen Include Dateien ausgelesen und an einen Wert gebunden.
  2. Die jeweiligen Tokens durch die jeweiligen Werte ersetzt.

Problematisch dabei sind allerdings wieder die Tokens. Nimmt man irgendwas wie @VCard@ (o. ä.) beschwert sich der HTML-Editor in Eclipse, dass ein einzelnes @VCard@ mittem in einem HTML-Dokument kein richtig gültiges HTML (bzw. XHTML) ist. Schreibt man <p>@VCard@</p> und benutzt den gesamten Ausdruck als Token beschwert sich Eclipse, dass spitze Klammern keine gültigen Tokens sind. Die Lösung ist relativ einfach: Man erstellt neue Schlüssel in der Property-Datei, die diese kompletten Ausdrücke enthalten und referenziert diese im Buildfile von Ant mittels ${Key} und das wars :-) Schön dabei ist auch, dass ich die bisherigen Include Dateien weiterhin nutzen kann, ich also nichtmal eine Zeile neuen HTML Code schreiben musste. Im Ergebnis sieht das dann etwa so aus:

<loadfile srcfile=”${source.dir}/Includes/back-button.inc” property=”back-button”/>

<replace dir=”${deploy.dir}” token=”${backButton}” value=”${back-button}”/>

Mit den beiden Zeilen hab ich mal eben schnell in allen HTML-Dateien einen Back-Button zurück auf die Startseite hinzugefügt.

FOAF #me

Posted by – October 29, 2008

Seit gerade eben ist jetzt endlich auch meine foaf.rdf online. Verknüpft hab ich sie über den üblichen Weg mittels <link rel=”meta” ../>. Die Seite ist damit nun auch semantisch zu nutzen – was immer das heißen mag.

In Anlehung an den Post von Gestern hab ich auch die .CSS Dateien überarbeitet und mittels Ant Copy & Replace so eine Art Coperate-Identity geschaffen. Dazu hab ich die jeweiligen Farben (bei mir nur eine) durch einen Platzhalter ersetzt und mittels Ant mit Inhalt gefüllt. Kann man sich in etwa als CSS-Variablen (oder Konstanten) vorstellen und läuft prima bisher :-) Der dazu gehörige Code ist auch simpel:

<copy file=”${webdir}/basic.template” tofile=”${webdir}/basic.css” overwrite=”true” />
<replace file=”${webdir}/basic.css” token=”@YELLOW@” value=”${yellow}” />

Mal schauen was man noch so anpassen kann…

Ant Update

Posted by – October 28, 2008

Hab lange Zeit nichts besseres gefunden, als jedesmal wenn ich ein Update der Homepage online stellen wollte, die Übersichtsseite für den HTML Code manuell zu ändern.

Heute bin ich dann endlich auf den Replace Task von Ant gestoßen. Zusammen mit dem Copy und Buildnumber Task konnte ich das manuelle gefummel nun auf etwas automatisches umstellen. Dazu hab ich zunächst ein Template erstellt, dass allen bisherigen Code der HTML Seite (gemeint ist wieder die Übersichtsseite mit dem HTML Code) enthält. Darin wurden allerdings die jeweilige konkrete Angabe der Build-Nummer, sowie des Build-Datums durch Platzhalter ersetzt, die durch den Replace Task ersetzt werden. Der Copy Task kommt dabei vorgeschaltet zum Zug, so dass das Template nicht überschrieben wird, sondern ausgehend vom Template eine jeweils aktuelle Version der Seite erstellt wird. Der Code dazu sieht denkbar einfach aus:

<copy file=”${webdir}/html/html.template” tofile=”${webdir}/html/index.shtml” overwrite=”true” />
<replace
file=”${webdir}/html/index.shtml”
token=”@buildDate@”
value=”${DSTAMP}” />
<replace
file=”${webdir}/html/index.shtml”
token=”@buildNumber@”
value=”${build.number}”/>

html.template ist dabei mein erstelltes Template für die HTML-Übersichtsseite. index.shtml die Datei, die später noch auf den Webserver hochgeladen wird (natürlich per Ant und FTP Task).

Damit soll auch gesagt sein, dass die bisherige Versionierung der Homepage von Versionsnummern zu Buildnummern übergegangen ist..