7

次のphingxmlでは、「skel」ターゲット内で、アプリが構成されているかどうかを確認します。構成されていない場合は、configureターゲットを呼び出して、構成を複数のファイルに適用します。

問題は、propertypromptdb.hostの後にプロパティが設定されていても、phingcallの後にプロパティが設定されないことです。

私は何が欠けていますか?

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

2 に答える 2

6

phingcallは内部的に新しい環境を作り出すと思います。ターゲットの構成が完了すると、この環境は範囲外になります。

これは、提案しているように、個別の構成ターゲットを使用できないことを意味します。

唯一の解決策は、configureターゲットに、他のターゲットが使用する構成ファイルを作成させることです。

于 2010-01-05T11:23:20.573 に答える
2

ターゲット内で設定されたプロパティはそれらのターゲットにスコープされ、親ターゲットの外ではアクセスできません。

のドキュメントPropertyTaskから:

スコープに関する重要な注意:タグが<property>タグ内で呼び出されると<phingcall>、すべてのプロパティが新しいローカルスコープに設定されます。<phingcall>したがって、親タグが完了すると、そのスコープ内に設定されたプロパティまたはその他の変数は存在しなくなります(または以前の値に戻ります) 。

于 2012-10-11T16:32:17.233 に答える