Java ANT脚本中的条件任务执行

Java ANT脚本中的条件任务执行,java,ant,Java,Ant,我的要求非常简单,我有一个ANT任务,它在内部处理异常,而不是抛出任何异常,而是向控制台抛出自定义消息[这些不是异常]。下面显示了一个示例,其中包含测试,但指定名称的工作区不存在 我在这里的要求是,如果除了构建成功之外还有任何这样的消息,我应该确保我的ANT脚本失败,这样它就不会更进一步了。但我不能这样做,因为我不知道如何读取写入控制台的自定义消息 我尝试在“记录”任务上进行探索,但没有成功,因为此日志只写入控制台,而不写入文件。我不知道为什么。但即使它被写入一个文件,我也应该理想地阅读文件的每

我的要求非常简单,我有一个ANT任务,它在内部处理异常,而不是抛出任何异常,而是向控制台抛出自定义消息[这些不是异常]。下面显示了一个示例,其中包含测试,但指定名称的工作区不存在

我在这里的要求是,如果除了构建成功之外还有任何这样的消息,我应该确保我的ANT脚本失败,这样它就不会更进一步了。但我不能这样做,因为我不知道如何读取写入控制台的自定义消息

我尝试在“记录”任务上进行探索,但没有成功,因为此日志只写入控制台,而不写入文件。我不知道为什么。但即使它被写入一个文件,我也应该理想地阅读文件的每一行,以找出是否存在一个特定的文本

有没有一种简单的方法可以尝试从控制台读取以前执行过的内容

<target name="build">
    <record name="test.txt" action="start" append="true" loglevel="verbose" />
    <echo>Welcome to Apache Ant! Building the project in Cordys Middleware</echo>
    <property environment="env"/>
    <property name="bop.install.dir" value="${env.CORDYS_HOME}"/>
    <exec executable="${bop.install.dir}/components/cws/scripts/linux/CWSPackage.sh" failonerror="true" resultproperty="output">        
        <env key="CLASSPATH" value="/opt/Cordys/Oracle_Jar/ojdbc6.jar"/>
        <arg value="${ORG_NAME}"/>
        <arg value="${WORKSPACE_NAME}"/>
        <arg value="${PROJECT_NAME}"/>      
    </exec>
    <echo>Finishing the build</echo>
    <record name="test.txt" action="stop"/>
    <echo>${output}</echo>
    <fail>Something wrong here.</fail> <!-- I want to throw this error conditionally -->
</target>

您要查找的是exec任务的outputproperty属性

您可以这样做:

<exec executable="${my.executable}" outputproperty="exec.output">
    <arg value="${my.arg}" />
</exec>

<fail message="Invalid output from exec task">
    <condition>
        <contains string="${exec.output}" substring="The workspace with the specified string does not exist." />
    </condition>
</fail>
多个条件允许布尔值具有任何复杂程度:

<fail message="Invalid output from exec task">
    <condition>
        <and>
            <not>
                <contains string="${exec.output}" substring="SUCCESS" />
            </not>
            <or>
                <contains string="${exec.output}" substring="ERROR" />
                <contains string="${exec.output}" substring="FAILED" />
            <or>
        </and>
    </condition>
</fail>
正则表达式:

<fail message="Invalid output from exec task">
    <condition>
        <matches string="${exec.output}" pattern="The .* does not exist." />
    </condition>
</fail>
经过这么多的尝试和错误的方法,这对我来说很有效。
谢谢你,奥斯汀。即使这是正在工作的ANT,我也只会接受你的答案,因为这是你所说的经过修改的版本:

你正在使用哪种版本的ANT?我尝试执行此操作,但失败了,错误是fail不支持嵌套的contains元素。我试过使用ANT的1.10.xxx版本,但我仍然面临同样的问题?还有什么我必须在这里做的吗?@KiranJoshi对不起,我忘了把它包在一个街区里。再试一次。关于你的另一个答案,我建议避免使用ant contrib.outputproperty=${exec.output}没有被捕获Austin:当我回显它时,它仍然显示${exec.output},显然由于这个原因它不成功……谢谢Austin。。。。它使用outputproperty=exec.output,而不是outputproperty=${exec.output}
<!-- *  This is an ANT script to build the project in development environment.
        Steps involved in this are
            * Building the project
            * Publishing the project
            * Creating the package for the project
 -->

<!-- 
    Sample command to execute this 
    ant build -DORG_NAME=businessservices3 -DWORKSPACE_NAME=ConfigurationManagement -DPROJECT_NAME='ConfigurationManagement'
 -->
<project name="Building Project" default="build">
    <property file="${PROJECT}" /> 
    <target name="build">
        <echo>Welcome to Apache Ant! Building the project in Cordys Middleware</echo>
        <property environment="env"/>
        <property name="bop.install.dir" value="${env.CORDYS_HOME}"/>

        <exec executable="${bop.install.dir}/components/cws/scripts/linux/CWSPackage.sh" outputproperty="exec.output">      
            <env key="CLASSPATH" value="/opt/Cordys/Oracle_Jar/ojdbc6.jar"/>
            <arg value="${ORG_NAME}"/>
            <arg value="${WORKSPACE_NAME}"/>
            <arg value="${PROJECT_NAME}"/>      
        </exec>
        <fail message="Build not successful for the project ${PROJECT_NAME}">
            <condition>
                <not>
                    <contains string="${exec.output}" substring="Operation  completed successful" />
                </not>
            </condition>
        </fail>

    </target>
</project>