2009-11-19 5 views
7

В следующем phing xml внутри объекта «skel» я проверяю, настроено ли приложение, если это не то, что я вызываю целевой параметр configure, а затем применяю конфигурацию к несколько файлов.Целевой объект, вызываемый через <phingcall>, не задает свойства в вызывающем целевом объекте

Проблема заключается в том, что свойство db.host не установлено после phingcall, даже если оно установлено после свойстваprompt.

Что мне не хватает?

<!-- 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> 

ответ

6

Я думаю, что phingcall создаст новую среду внутри. Когда цель настройки выполнена, эта среда выходит за рамки.

Это означает, что нельзя использовать отдельную целевую настройку, как вы предлагаете.

Единственное решение может заключаться в том, чтобы создать целевой файл конфигурации, который используется другими объектами.

2

Свойства, установленные внутри целей, ограничены этими объектами и недоступны вне их родительских целей.

От the documentation for PropertyTask:

Важное замечание о сфере: когда <property> тег называется внутри <phingcall> тега, какие свойства устанавливаются в новой локальной области видимости. Таким образом, любые свойства или другие переменные, установленные внутри этой области действия, перестанут существовать (или вернуться к их предыдущему значению) после завершения родительского тега <phingcall>.