2

phingcallコマンドを使用してターゲットを呼び出しています。呼び出されたターゲットからステータス変数を返すか、少なくとも呼び出し元のターゲットから既存の値を変更したいと思います。目標:プロパティで指定したサブターゲットが失敗した場合、メインターゲット制御ロジックで分岐したいと思います。以下のコードは機能しません。それを機能させる方法や私の目標のための代替アプローチはありますか?

ありがとう、ユルゲン

<target name="main">
    <echo>target a</echo>
    <echo>${bOk}</echo>
    <exec command="echo 1" outputProperty="bOk" />
    <echo>bOk is 1: ${bOk}</echo>
    <phingcall inheritRefs="true" target="sub">
    </phingcall>
    <echo>bOk should now be 0: ${bOk}</echo>
</target>

<target name="sub">
    <echo>target b</echo>
    <echo>bOk is 1: ${bOk}</echo>
    <exec command="echo 0" outputProperty="bOk" />
    <echo>bOk now is 0: ${bOk}</echo>
</target>

ここでの問題は

   <echo>bOk should now be 0: ${bOk}</echo>

エコー

   bOk should now be 0: 1
4

2 に答える 2

3

#phing IRCの多大な助けを借りても、私は問題を解決できませんでした。ターゲット間で受け渡されるデータを説明するカスタムタスクを作成することにしました。

<?php

require_once "phing/Task.php";

class rvGlobalTask extends Task {

    private static $bOk = 1;
    private $sMode = null;
    private $bValue = null;
    private $outputProperty = null;

    public function setSMode( $sMode ) {
        $this->sMode = $sMode;
    }
    public function setBValue( $bValue ) {
        $this->bValue = $bValue;
    }
    public function setOutputProperty( $outputProperty ) {
        $this->outputProperty = $outputProperty;
    }

    public function main() {
        if ( $this->sMode == "set" ) {
            rvGlobalTask::$bOk = $this->bValue;
        } else {
            $this->project->setProperty(
                $this->outputProperty,
                rvGlobalTask::$bOk
            );
        }
    }
}
?>

これは私の問題には問題なく機能します。おそらく他の誰かがこれも役に立つと思うでしょう。

于 2011-07-22T19:03:48.280 に答える
2

ExecTaskを使用して出力をキャプチャする方法は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<project name="example" default="check-composer">

    <!-- set a property to contain the output -->
    <property name="whichComposer" value="" />

    <!-- check if composer (getcomposer.org) is installed globally -->
    <target name="check-composer">
        <!-- put the output of "which" in our property -->
        <exec command="which composer" outputProperty="whichComposer" />

        <!-- act on what we found out -->
        <if>
            <contains string="${whichComposer}" substring="composer" />
            <then>
                <echo>Composer installed at ${whichComposer}</echo>
            </then>
            <else>
                <echo message="better install composer. ${whichComposer}"/>
            </else>
        </if>
    </target>

</project>
于 2012-09-14T21:04:33.703 に答える