Ant Skripte – Properties
Vor ein paar Tagen hatte ich ja versprochen, dass ich noch einen zweiten Teil zum Thema Ant-Skripte schreiben will. Und welch Überraschung, hier ist er! Das Gute ist, dass mein Wissen über diese Technologie noch genau für einen Beitrag reicht. Also los.
Wir haben ja letztes mal darüber geredet, wie man ein einfaches Skript anlegt. Dieses Skript, ob sinnvoll oder nicht, hat das Erstellen einer PHPDoc-Dokumentation (ist das doppelgemoppelt?) angestoßen. Das Skript war recht einfach, damit man die Syntax versteht. – Vielleicht erstelle ich einmal eine Sammlung mit den Snippets, die ich so verwende (ist auf jeden Fall nützlich, zumindest für mich). – So weiter geht’s. In vielen Fällen hat man mehrere Projekte die man bauen will. Zum Beispiel ein Hauptprojekt und eine Bibliothek, kann ja auch sein, dass jedes Plugin als eigenes Projekt gesehen wird (und auch gesehen werden sollte). Jetzt würde man also in build.xml den selben Code reinbauen, so dass überall eine PHPDoc gebaut wird. Als Freunde der Objektorientierung sind wir natürlich darauf versessen keine Redundanz in unserem Code zu haben und damit auch nicht in unseren Skripten. Versuchen wir das also aufzulösen und sauber hin zu bekommen.
Wir erinnern uns noch an das alte Skript. Nein? Also hier wäre es nochmal für die, die ein mieses Gedächtnis haben:
<project name="phpdoc" default="build" basedir=".."> <target name="phpdoc"> <echo message="Creating PHPDoc" /> <mkdir dir="phpdoc" /> <exec dir="${basedir}" executable="phpdoc"> <arg line="--directory ${basedir}/path/to/sources} --quiet on --undocumentedelements on --title 'phm-Dokumentation' --sourcecode on --output HTML:Smarty:PHP --target phpdoc" /> </exec> </target><target name="build" depends="phpdoc" /></project>
Jetzt gibt es zwei Dinge, die man verändern will. Der path/to/source sollte irgendwie parametrisierbar sein und eigentlich sollte das ganze Skript ausgelagert sein und man möchte es einfach einbinden. Kein Problem, denn dafür gibt es zwei Tags, die ihr verwenden könnt. Fangen wir mit der Parametrisierung an. In Ant kann man ganz einfach Variablen einführen und diese mit einem Wert füllen über das Property Tag. Dies würde dann zum Beispiel wie folgt aussehen:
<property name="sourcePath" value="/path/to/sources"/>
Jetzt kann man mit ${sourcePath} auf diese Variable zugreifen. In unserem Fall würde die Zeile im Skript jetzt so aussehen:
<arg line="--directory ${basedir}${sourcePath} />
So das erste Problem wäre hiermit gelöst. Unsere Funktion hat jetzt keine Abhängigkeit mehr zum Projekt. Als zweites lagern wir nun den Code aus. Dafür wurde das import Tag erfunden. Mit diesem Element kann man ganz einfach andere XML-Dateien inkludieren. Jetzt schnell das Tag, damit ihr nicht länger warten müsst:
<import file="/path/to/my/script/phpdoc_build.xml" />
Wie ihr sicher schon ahnt, müssen wir außerdem den Inhalt unseres Skriptes in eine Datei namens phpdoc_build.xml kopieren. Das würde dann ungefähr so aussehen:
<project name="phpdoc" default="build" basedir=".."> <target name="phpdoc"> <echo message="Creating PHPDoc" /> <mkdir dir="phpdoc" /> <exec dir="${basedir}" executable="phpdoc"> <arg line="--directory ${basedir}${sourcePath} --quiet on --undocumentedelements on --title 'phm-Dokumentation' --sourcecode on --output HTML:Smarty:PHP --target phpdoc" /> </exec> </target><target name="build" depends="phpdoc" /> </project>
Viel muss nun nicht mehr getan werden. Unsere ursprüngliche build.xml Datei noch abspecken und wir sind fertig. Die hat nämlich jetzt eine stolze Große von 4 Zeilen.
<project name="project1" default="build" basedir="..">
<property name="sourcePath" value="/path/to/sources" />
<import file="/path/to/my/script/phpdoc_build.xml" />
</project>
Einen Schritt könnte man noch weitergehen und ein Propertyfile erstellen, aber das erkläre ich euch ein ander mal. War also am Anfang gelogen, als ich gesagt hab, dass ich genau für einen Artikel noch Wissen habe. Ätsch. Naja, ist mir auch erst jetzt wieder eingefallen, war also keine Absicht.
Im zweiten Snippet habe ich einen Copy/Pate-Fehler entdekt:
${basedir}${basedir}${sourcePath}
Copy/Paste natürlich
Kann man mit Ant/Phing Variablen eigentlich auch rechnen?
Ein
ergibt leider eine ’10-1′ und keine 9. Gibt es da vielleicht (Daten-)Typen um das zu erzwingen?
@Jörg: Danke ist behoben.
@Ulf: Da bin ich wirklich überfragt, bis jetzt musste ich noch nicht in Skripten rechnen, aber so wie ich ant einschätze gibt es auch da eine Möglichkeit.
Edit: Hmp, komischer XSS-Parser…
Das sollte oben stehen:
Edit: Hmp, komischer XSS-Parser…
Das sollte oben stehen:
@Nils
Kannst du die anderen Kommentare löschen, musste ja die Stärke des XSS-Parsers testen…
Edit: Hmp, komischer XSS-Parser…
Das sollte oben stehen:
‚property name=“ten“ value=“10″‚
‚property name=“nine“ value=“${ten}-1″‚
@Nils
Kannst du die anderen Kommentare löschen, musste ja die Stärke des XSS-Parsers testen…