Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unconditionally execute a task in ant?

I'm trying to define a task that emits (using echo) a message when a target completes execution, regardless of whether that target was successful or not. Specifically, the target executes a task to run some unit tests, and I want to emit a message indicating where the results are available:

<target name="mytarget">
  <testng outputDir="${results}" ...>
    ...
  </testng>
  <echo>Tests complete.  Results available in ${results}</echo>
</target>

Unfortunately, if the tests fail, the task fails and execution aborts. So the message is only output if the tests pass - the opposite of what I want. I know I can put the task before the task, but this will make it easier for users to miss this message. Is what I'm trying to do possible?

Update: It turns out I'm dumb. I had haltOnFailure="true" in my <testng> task, which explains the behaviour I was seeing. Now the issue is that setting this to false causes the overall ant build to succeed even if tests fail, which is not what I want. The answer below using the task looks like it might be what I want..

like image 665
Kris Pruden Avatar asked Sep 24 '08 16:09

Kris Pruden


2 Answers

You can use a try-catch block like so:

<target name="myTarget">
    <trycatch property="foo" reference="bar">
        <try>
            <testing outputdir="${results}" ...>
                ...
            </testing>
        </try>

        <catch>
            <echo>Test failed</echo>
        </catch>

        <finally>
            <echo>Tests complete.  Results available in ${results}</echo>
        </finally>
    </trycatch>
</target>
like image 65
bernie Avatar answered Sep 22 '22 23:09

bernie


According to the Ant docs, there are two properties that control whether the build process is stopped or not if the testng task fails:

haltonfailure - Stop the build process if a failure has occurred during the test run. Defaults to false.

haltonskipped - Stop the build process if there is at least on skipped test. Default to false.

I can't tell from the snippet if you're setting this property or not. May be worth trying to explicitly set haltonfailure to false if it's currently set to true.

Also, assuming you're using the <exec> functionality in Ant, there are similar properties to control what happens if the executed command fails:

failonerror - Stop the buildprocess if the command exits with a return code signaling failure. Defaults to false.

failifexecutionfails - Stop the build if we can't start the program. Defaults to true.

Can't tell based on the partial code snippet in your post, but my guess is that the most likely culprit is failonerror or haltonfailure being set to true.

like image 40
Jay Avatar answered Sep 26 '22 23:09

Jay