2011-07-16 16 views
13

Czy istnieje sposób grupowania celów w Phing? Mam wiele celów, które można ponownie wykorzystać, uruchamiając je w różnych zamówieniach i kombinacjach. Na przykład, aby utworzyć nowy dev produkcji:Jak grupować cele w Phing?

$ phing clean 
$ phing prepare 
$ phing build 
$ phing runtests 

lub zaktualizować kompilacji dev z repo:

$ phing update 
$ phing runtests 

Czy istnieje sposób, aby grupy te cele, aby uruchomić je za pomocą jednego polecenia? Jestem świadomy, że można cele łańcuchowe np:

$ phing clean prepare build runtests 
$ phing update runtests 

Ale idealnie chciałbym uruchomić polecenie takie jak:

$ phing cleanbuild 

byłoby to wszystkie cztery cele. W ten sposób plik kompilacji może zostać podzielony na cele wielokrotnego użytku. Utworzenie nowego celu, który to zrobi spowoduje dublowanie kodu z istniejących celów. Wiem, że możesz użyć parametru depend, aby wykonać inne cele, ale chcę, aby każdy cel był niezależny od siebie.

Dokumentacja Phing nie wydaje się zbyt jasna, jak to zrobić, ale jestem pewien, że można wywoływać cele w innych celach, ponieważ musi to być dość powszechny sposób robienia rzeczy. Wielkie dzięki.

+0

Im bardzo ciekaw wyniku tego pytania jak ja po prostu patrząc używając Phing się zautomatyzować migracje baz danych itp – martynthewolf

Odpowiedz

25

OK, po polowaniu trochę znalazłem odpowiedź. Możesz wywoływać cele z innych celów za pomocą zadania PhingCallTask. Przykładem złożonego zadania:

<target name="cleanbuild" description="Runs a clean dev build"> 
    <phingcall target="clean" /> 
    <phingcall target="prepare" /> 
    <phingcall target="build" /> 
    <phingcall target="runtests" /> 
</target> 

Dokumentacja jest tutaj:

http://www.phing.info/docs/guide/stable/apbs25.html

+6

Jedną rzeczą, aby pamiętać, z dokumentacja: Ważna uwaga dotycząca zakresu: każdy tag tworzy nowy zakres lokalny. W związku z tym wszelkie właściwości lub inne zmienne ustawione wewnątrz tego zakresu przestaną istnieć (lub powrócą do poprzedniej wartości) po ukończeniu znacznika . – gabrielk

14

swoją odpowiedź jest w porządku. Lub można użyć atrybutu depends i uczynić go jeszcze krócej:

<target name="cleanbuild" description="Runs a clean dev build" depends="clean, prepare, build, runtests"></target> 
+0

To interesujący sposób na zrobienie tego, ale nie jest czytelny i może wyglądać bardzo niechlujnie, jeśli zaczniesz dodawać więcej celów. Dobry wybór dla małych celów kompozytowych. Twoje zdrowie. –

+7

Zgadzam się co do czytelności. Zaletą jest to, że jeśli jeden z celów jest zależny od innego celu, jeśli jest wywoływany osobno, nie uzyskuje się dwukrotnego wywołania celów zależnych. Powiedzmy, że chcesz wywoływać osobno programy runtests. Jeśli zawsze zależy od "przygotowania", użycie w runtestach spowoduje, że cel "prepare" zostanie wywołany 2x podczas działania cleanbuild. Jeśli użyjesz "zależy", zostanie wywołany tylko jeden raz na wywołanie phing. – poisson

+1

Po prostu natknąłem się na sytuację, w której to podejście miało sens w stosunku do mojej odpowiedzi. Bardzo przydatne do unikania wykonywania zadań wiele razy. –