Autor wpisu: bastard13, dodany: 30.12.2013 15:22, tagi: oop
Autor wpisu: zleek, dodany: 18.12.2013 13:27, tagi: php, zend_framework
Autor wpisu: Jacek Skirzyński, dodany: 09.12.2013 23:54, tagi: php
Przyszedł czas na drugie spojrzenie na Phing – czym on jest napisałem w skrócie w poprzednim wpisie.
Parametry uruchomienia
To narzędzie konsolowe, więc jest uruchamiane za pomocą wywołania phing [opcje] [cel] w konsoli (najlepiej w katalogu zawierającym plik build.xml). W wywołaniu można umieścić parametry/opcje:
[nazwa celu]– nazwa celu, który ma zostać wywołany; jeżeli się nie pojawi zostanie uruchomiony cel domyślny projektu (<project ... default="domyslny_cel"/>);-h/-help– wyświetlenie ogólnej pomocy aplikacji;-l/-list– wyświetlenie listy celów zdefiniowanych wbuild.xml;-f [plik]/-buildfile [plik]– nazwa pliku skryptu, jeżeli inna niżbuild.xml;-D[właściwość]=[wartość]– przekazanie do skryptu właściwości o podanej wartości;-propertyfile [plik]– wczytanie podanego pliku z deklaracjami właściwości;
Cele
W poprzedniej sekcji wspomniałem o parametrze pozwalającym wyświetlić listę dostępnych celów. Jednak nie każdy cel powinien być uruchamiany „samodzielnie” – czasem jest potrzebny tylko do spełnienia jakichś podstawowych wymagań dla innego celu, który wykonuje faktyczne operacje. Przykładem może być cel, który wczytuje/ustala odpowiednie właściwości konfiguracyjne (np. ścieżki do katalogów, dane FTP etc.), wywołanie takiego celu samodzielnie do niczego nie doprowadzi. Dlatego takie „prywatne” cele można ukryć na liście za pomocą atrybutu <target ... hidden="true"/>.
Kolejną i chyba nabardziej przydatną możliwością celów jest ustalanie dla nich zależności – na przykład, żeby wykonać cel „deploy” (który wgrywa pliki na serwer), należy najpierw te pliki/katalogi przygotować (np. usunąć pliki tymczasowe). W skrypcie Phing nie trzeba deklarować dodatkowo wywołań celów, od których zależy wykonanie bieżącego lub samemu wywoływać ręcznie cele w odpowiedniej kolejności. W tym celu wykorzystuje się atrybut <target ... depends="cel1,cel2,cel3"/>
Są jeszcze dwa pomocne atrybuty celów – if, unless. Pierwszy uruchamia cel tylko w momencie, kiedy zmienna o podanej nazwie jest zadeklarowana. Drugi ma działanie odwrotnie. Poniżej przykład:
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="hello">
<property name="uruchomione" value="" />
<target name="hello" depends="cel1,cel2">
<echo>Hello</echo>
</target>
<target name="cel1" if="uruchomione">
<echo>cel 1</echo>
</target>
<target name="cel2" unless="uruchomione">
<echo>cel 2</echo>
</target>
</project>
Poniżej wynik uruchomienia (pojawiają się nagłówki wszystkich wywołanych celów, ale kod cel2 nie został wykonany ze względu na warunek zawarty w atrybucie unless.
cim@cim-k52:~/public_html/Phing$ phing
Buildfile: /home/cim/public_html/Phing/build.xml
HelloWorld > cel1:
[echo] cel 1
HelloWorld > cel2:
HelloWorld > hello:
[echo] Hello
BUILD FINISHED
Total time: 0.0581 seconds
Właściwości
Właściwości są swego rodzaju zmiennymi dla skryptu Phing i zostały już użyte w poprzednich przykładach. Warto pamiętać, że odwołania do właściwości mają budowę ${nazwaWlasciwosci}, np. <echo>Wartość zmiennej: ${nazwa}</echo>. Przydatne jest używanie kropek dla budowania hierarchii – ${aplikacja.baza.host}% – można w ten sposób grupować właściwości co mocno zwiększa czytelność.
Do tej pory w przykładach pojawiały się właściwości z wartościami zadeklarowanymi w pliku build.xml, jednak to nie jedyne możliwe źródła danych:
<property name="nazwa" value="wartosc" />– pokazywany wcześniej sposób deklarowania zmiennej, w deklaracjach można odwoływać się do innych zmiennych (np. do jakiejś ścieżki dodać nazwe kolejnego katalogu);<property file="plik.properties" />– wczytuje do skryptu właściwości zdefiniowane w podanym pliku; można użyć również dodatkowego atrybutu<property file="plik.properties" prefix="zPliku" />co spowoduje dodanie prefiksu do wszystkich nazw właściwości znajdujących się w pliku;<echo>${env.PATH}</echo>– odwołania z prefiksemenv.pozwalają na dostęp do zmiennych środowiskowych (zależne od systemu);
W przypadku zdublowania nazw właściwości Phing będzie zwracał pierwszą wartość właściwości, żeby zmienić to zachowanie trzeba dodać do drugiej deklaracji atrybut <property ... override="yes" />.
Podczas tworzenia ścieżek lub operacji plikowych pomocny może okazać się dostęp do ścieżki do katalogu projektu (zadeklarowanej w tagu <project ... basedir="/var/www/Projekt"> lub domyśnie ustawianej przez Phing). Ścieżka jest dostępna pod nazwą ${project.basedir}.
Kanał ATOM
