• Ant Skripte – Properties

    von am 16. August 2010

    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.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    8 Kommentare »


    • Jörg Basedow
      am 16. August 2010 um 10:19 Uhr

      Im zweiten Snippet habe ich einen Copy/Pate-Fehler entdekt:

      ${basedir}${basedir}${sourcePath}


    • Jörg Basedow
      am 16. August 2010 um 10:20 Uhr

      Copy/Paste natürlich


    • Ulf Kirsten
      am 16. August 2010 um 10:44 Uhr

      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?


    • Nils Langner
      am 16. August 2010 um 11:02 Uhr

      @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.


    • Ulf Kirsten
      am 16. August 2010 um 15:27 Uhr

      Edit: Hmp, komischer XSS-Parser…

      Das sollte oben stehen:


    • Ulf Kirsten
      am 16. August 2010 um 15:29 Uhr

      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…


    • Ulf Kirsten
      am 16. August 2010 um 15:30 Uhr

      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…


    • Ant – Propertyfiles und Conditions | PHP hates me - Der PHP Blog
      am 20. August 2010 um 07:03 Uhr

      [...] Ant Skripte – Properties [...]

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.