2009-11-19 8 views
7

W poniższym phing xml, wewnątrz celu "skel" sprawdzam, czy aplikacja jest skonfigurowana, jeśli tak nie jest, to wywołuję cel configure, a następnie stosuję config kilka plików.Cel wywołany przez <phingcall> nie ustawia właściwości w celu wywoływania

Problem polega na tym, że właściwość db.host nie jest ustawiona po phingcall, mimo że jest ustawiona po parametrze propertyprompt.

Czego mi brakuje?

<!-- base configuration --> 
<property name="paths.config" value="config" /> 
<property name="paths.config.file" value="${paths.config}/environment.ini" /> 

<available file="${paths.config.file}" property="configured" /> 

<target name="configure"> 
    <if> 
    <equals arg1="${configured}" arg2="true" /> 
    <then> 
     <echo message="Reconfigure ..." /> 
    </then> 
    <else> 
     <echo message="Configure ..." /> 
    </else> 
    </if> 

    <propertyprompt propertyName="db.host" defaultValue="localhost" promptText="Mysql Server Host" /> 
</target> 

<target name="skel"> 
    <echo msg="Skel files..." /> 

    <if> 
    <equals arg1="${configured}" arg2="${configured}" /> 
    <then> 
     <echo message="Missing config file ..." /> 
     <phingcall target="configure" /> 
    </then> 
    </if> 

    <echo message="${db.host}" /> 
    <copy todir="config"> 
     <mapper type="glob" from="*.skel" to="*"/> 
     <filterchain> 
      <expandproperties /> 
     </filterchain> 

     <fileset dir="config"> 
      <include name="*.skel" /> 
     </fileset> 
    </copy> 
</target> 

Odpowiedz

6

myślę phingcall stworzy nowe środowisko wewnętrznie. Po skonfigurowaniu celu docelowego to środowisko jest poza zakresem.

Oznacza to, że nie można użyć oddzielnego celu konfiguracji, tak jak sugerujesz.

Jedynym rozwiązaniem może być utworzenie docelowej konfiguracji pliku konfiguracyjnego używanego przez inne obiekty docelowe.

2

Właściwości ustawione wewnątrz celów są ograniczone do tych celów i nie są dostępne poza ich obiektami macierzystymi.

Od the documentation for PropertyTask:

Ważna uwaga o zakresie: gdy znacznik <property> nazywa wewnątrz <phingcall> tagu wszelkie właściwości są ustawiane w nowym zasięgu lokalnym. 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 zakończeniu nadrzędnego znacznika <phingcall>.