Facebook
Twitter
Google+
Kommentare
6

Ant – Propertyfiles und Conditions

Jetzt aber wirklich der letze Teil meiner kleinen Ant-Reihe. Mir sind nämlich noch zwei Features eingefallen, die ich noch erklären will, bevor wir das Thema erstmal ad acta legen.  Ich mache das übrigens auch für mich, denn im Moment bin ich fit in der Thematik, aber wer weiß, wie es damit in ein paar Wochen aussieht. Mein Gedächtnis hat manchmal einige Eigenschaften eines Siebs.

Fangen wir aber einfach mit den Propertyfiles an. Im letzten Artikel hatte ich ja schon erklärt, dass man Properties ganz einfach innerhalb eines Build-Files definieren kann. Das ging dann so:

<property name="sourcePath" value="/path/to/sources"/>

Irgendwie ist das wie Konstanten zu definieren in einem Softwareprojekt. Das kann man machen, aber wenn man sie oft ändern will, dass fühlt sich das irgendwie nicht richtig an. Dann packt man das doch lieber in eine Konfigdatei, da gehört sowas ja auch hin. Für die ant-Skripte sehe ich das ähnlich. Packen wir diese Einstellungen also in eine Konfigurationsdatei. Im Ant-Jargon nennen wir diese propertyfiles. Die sehen dann wir folgt aus:

# phpunit properties
phpunit.enabled      = true
phpunit.bootstrap    = boostrtap.php
phpunit.memory_limit = 512M

Das speichern wir zum Beispiel in eine project.property Datei und schon sind wir fast fertig. (Schreibe ich eigentlich oft „jetzt sind wir fertig“ ?, kommt mir grad so vor). Diese Datei können wir jetzt in unserem Build-Skript einfach einbinden:

<property file="project.property" />

oder aber wir machen es noch ein wenig schöner. Wir können auch ein wenig Dependency Injection spielen und das Propertyfile als Parameter beim Aufruf mitgeben.

ant -propertyfile project.properties

So das war das vorletzte Stück Wissen, dass ich gesammelt habe. Jetzt gehen wir noch mal kurz auf die Möglichkeit ein IF-Abfragen in unseren Skripten einzusetzen. Ich habe vorher ja schon mal eine Property aufgelistet, die phpunit.enabled heißt. Ziel ist es jetzt ein target, also eine Gruppe von Anweisungen, nur dann auszuführen, wenn die Property auf true gesetzt ist. In Code ausgedrückt sieht das dann so aus:

<condition property="phpdoc_enabled">
<equals arg1="${phpdoc.enabled}" arg2="true"/>
</condition>
<target name="phpunit" if="phpunit_enabled">
...
</target>

Joa, eigentlich ganz einfach. In der Condition oben wird die Variable phpdoc_enabled auf Wahr gesetzt, sobald das Argument1 und das Argument2 gleich sind. In unserem Target können wir dann ganz einfach das Attribut if benutzen und fertig. Jetzt fragt ihr euch wahrscheinlich, warum ich nicht gleich die phpdoc.enabled Variable in dem IF-Konstrukt verwendet habe? Naja dummerweise wird das IF immer Wahr, sobald der Wert gesetzt ist, egal wie. Also könnte auch False drinstehen und es würde klappen. Das macht sich aber in einem Propertyfile irgendwie nicht so gut. Intuitiv will man true und false verwenden und dafür müssen wir eben diesen kleinen Umweg gehen.
So jetzt fällt mir wirklich nichts mehr ein, aber ich hoffe, dass der ein oder andere etwas mitgenommen hat. Mir hat’s auf jeden Fall geholfen.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

6 Comments

  1. Ant ist schon ein sehr nützlicher Helfer. Ich nutze die Properties auch gerne um die SVN-Informationen zu speichern. Dazu habe ich in jedem Buildfile einen Task der „svn info“ ausführt und die Informationen in die entsprechende Datei schreibt.

    Daraus kann man die Informationen jederzeit wieder auslesen um z.B. Platzhalter im Sourcecode mit der Revision des deployten Packets zu ersetzen. Vielleicht soll auch ein Zip-Archiv einen entsprechenden Dateinamen bekommen…

    Viele Grüße, Micha

    Reply
  2. Kann man mit Properties nun rechnen?

    ‚property name=“result“ value=“${number}-1″‚

    Ansonsten empfand ich die Artikelserie als sehr angenehm, werde die Konfiguration meiner Property-Files sowie Code-Duplikation zwischen verschiedenen Build-Skripten durch Import-Statements sicherlich ändern. Danke!

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen