有条件地重定向ant exec任务中的输出



是否有一种方法可以有条件地将输出重定向到属性或stdout流,如下面的非工作示例所示?

<macrodef name="mytask">
  <attribute name="output" default="STDOUT"/>
  <sequential>
      <exec executable="my.exe" outputproperty="@{output}"/>
  </sequential>
</macrodef>

上面的示例默认情况下将输出重定向到属性STDOUT。相反,我希望它被定向到stdout流。

我可以创建mytask_with_stdout作为上述宏的副本,并删除exec outputproperty,但这将违反DRY原则。

有什么好方法吗?

有两个Ant特性可以组合起来获得您想要的东西。

首先,<macrodef>可以传递给任何您想要的<element>

其次,<redirector>可用于捕获属性中<exec>命令的输出。

我在Windows机器上运行了下面的Ant脚本,这样我就可以使用cmd.exe的echo命令了。将cmd.exe替换为my.exe:

<project name="exec-redirector-example" default="run">
    <macrodef name="mytask">
        <attribute name="message"/>
        <element name="myredirector" optional="true"/>
        <sequential>
            <exec executable="cmd.exe">
                <arg value="/c"/>
                <arg value="echo"/>
                <arg value="@{message}"/>
                <myredirector/>
            </exec>
        </sequential>
    </macrodef>
    <target name="run">
        <!-- exec outputs to STDOUT by default -->
        <mytask message="To STDOUT">
        </mytask>
        <!-- exec outputs to a property in this example -->
        <mytask message="To property">
            <myredirector>
                <redirector outputproperty="my.property"/>
            </myredirector>
        </mytask>
        <echo>${my.property}</echo>
    </target>
</project>

相关内容

  • 没有找到相关文章

最新更新