3

私はすべての構築タスクを、別々に実行することを意図していないいくつかのターゲットに分割しています。他の2つのターゲットからユーザーが入力した値を使用しようとしていますtargetAが、それらは異なるスコープにあるようです。これを修正する1つの方法は、 andtargetAdependsプロパティに追加することですが、結果として2回呼び出されます。targetBtargetCtargetA

では、その値をグローバルに保存する方法はありますか?または、ターゲットが1回だけ実行されるようにしますか?

<target name="targetA" description="..." hidden="true">
    <input propertyName="property" defaultValue="default" ></input>
    <!-- some action goes on here -->
</target>

<target name="targetB" description="..." hidden="true">
    <echo message="${property}" />
    <!-- some action goes on here -->
</target>

<target name="targetC" description="..." hidden="true">
    <echo message="${property}" />
    <!-- some action goes on here -->
</target>

<target name="install">
    <phingcall target="targetA" />
    <phingcall target="targetB" />
    <phingcall target="targetC" />
</target>
4

2 に答える 2

2

さて、解決策を見つけました。プロパティスコープは互いにネストされているように見えるので、ターゲットを記述し、そこにすべての入力を配置してから、に依存するようにinputメインターゲットを定義できます。 これで、次のように呼び出されたすべてのターゲットですべてのプロパティを使用できるようになります。installinputinstall

<target name="input" description="..." hidden="true">
    <input propertyName="property" defaultValue="default" ></input>
    <!-- more inputs here -->
</target>

<target name="targetB" description="..." hidden="true">
    <echo message="${property}" />
    <!-- some action goes on here -->
</target>

<target name="targetC" description="..." hidden="true">
    <echo message="${property}" />
    <!-- some action goes on here -->
</target>

<target name="install" depends="input">
    <phingcall target="targetB" />
    <phingcall target="targetC" />
</target>
于 2012-08-01T06:35:42.053 に答える
2

私はこれにたくさん苦労しました。もう1つの方法は、ファイルからプロパティを保存および取得することです。これにより、タスク間の依存関係がより柔軟になり、セッション間で値を保存できるという追加の利点があります。

たとえば、各入力ターゲットを次で始まるようにします。

<propertyprompt propertyName="site_dir" promptText="Name of site directory" promptCharacter="?" useExistingValue="true" />
<if>
  <available file="${site_dir}/build.props" />
  <then>
    <echo msg="Retrieving stored settings from ${site_dir}/build.props" />
    <property file="${site_dir}/build.props" />
  </then>
</if>

すでに回答がある場合に質問をスキップする場合は、useExistingValue = "true"を使用して、必要な入力を取得します。次に、ターゲットを次のように終了します。

<echo msg="Updating stored settings in ${site_dir}/build.props" />
<exportproperties targetfile="${site_dir}/build.props" />
于 2013-10-13T22:58:56.807 に答える