# Finalizer task does not run if finalized task fails

**URL:** <https://discuss.gradle.org/t/finalizer-task-does-not-run-if-finalized-task-fails/1923>\
**Category:** Old Forum Archive\
**Created:** [February 15, 2014, 6:20pm UTC](https://discuss.gradle.org/t/finalizer-task-does-not-run-if-finalized-task-fails/1923 "2014-02-15T18:20:00Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Andres\_Almiray1](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/andres_almiray1/32/121_2.png) [@Andres\_Almiray1](https://discuss.gradle.org/u/Andres_Almiray1)\
**Post date:** [February 15, 2014, 6:20pm UTC](https://discuss.gradle.org/t/finalizer-task-does-not-run-if-finalized-task-fails/1923/1 "2014-02-15T18:20:00Z")

</div>

I’ve encountered a problem setting up a finalizer task for an integrationTest task. The code can be found at [https://github.com/aalmiray/griffon2](https://github.com/aalmiray/griffon2) , specifically [https://github.com/aalmiray/griffon2/blob/master/gradle/integration-test.gradle](https://github.com/aalmiray/griffon2/blob/master/gradle/integration-test.gradle)

These are the interesting bits

```gradle
task integrationTest(type: Test, dependsOn: jar) {
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
    reports.html.enabled = false
}
  task integrationTestReport(type: TestReport, dependsOn: integrationTest) {
    destinationDir = file("${buildDir}/reports/integration-tests")
    reportOn integrationTest
}
  integrationTest.mustRunAfter test
integrationTest.finalizedBy integrationTestReport

```

The ‘integrationTest’ task disables html reporting so that ‘integrationTestReport’ can specify a different location as I want to keep regular tests separated from integration tests. So far running ‘gradle clean integrationTest --dry-run’ results in

```gradle
:sample-swing-groovy:compileJava SKIPPED
:sample-swing-groovy:compileGroovy SKIPPED
:sample-swing-groovy:processResources SKIPPED
:sample-swing-groovy:classes SKIPPED
:sample-swing-groovy:instrument SKIPPED
:sample-swing-groovy:copyCoberturaDatafile SKIPPED
:sample-swing-groovy:compileIntegrationTestJava SKIPPED
:sample-swing-groovy:compileIntegrationTestGroovy SKIPPED
:sample-swing-groovy:processIntegrationTestResources SKIPPED
:sample-swing-groovy:integrationTestClasses SKIPPED
:sample-swing-groovy:jar SKIPPED
:sample-swing-groovy:integrationTest SKIPPED
:buildDashboard SKIPPED
:sample-swing-groovy:integrationTestReport SKIPPED
:sample-swing-groovy:generateCoberturaReport SKIPPED
:sample-swing-groovy:performCoverageCheck SKIPPED

```

which means the ‘finalizedBy’ setting works. Running the test for real (while it’s green) results in

```gradle
:sample-swing-groovy:compileJava UP-TO-DATE
:sample-swing-groovy:compileGroovy
:sample-swing-groovy:processResources
:sample-swing-groovy:classes
:sample-swing-groovy:instrument SKIPPED
:sample-swing-groovy:copyCoberturaDatafile SKIPPED
:sample-swing-groovy:compileIntegrationTestJava UP-TO-DATE
:sample-swing-groovy:compileIntegrationTestGroovy
:sample-swing-groovy:processIntegrationTestResources UP-TO-DATE
:sample-swing-groovy:integrationTestClasses
:sample-swing-groovy:jar
:sample-swing-groovy:integrationTest
:buildDashboard UP-TO-DATE
:sample-swing-groovy:integrationTestReport
:sample-swing-groovy:generateCoberturaReport SKIPPED
:sample-swing-groovy:performCoverageCheck SKIPPED

```

We’re 2 for 2. The problem appears if the ‘integrationTest’ task fails because of a test failure

```gradle
:sample-swing-groovy:compileJava UP-TO-DATE
:sample-swing-groovy:compileGroovy
:sample-swing-groovy:processResources
:sample-swing-groovy:classes
:sample-swing-groovy:instrument SKIPPED
:sample-swing-groovy:copyCoberturaDatafile SKIPPED
:sample-swing-groovy:compileIntegrationTestJava UP-TO-DATE
:sample-swing-groovy:compileIntegrationTestGroovy
:sample-swing-groovy:processIntegrationTestResources UP-TO-DATE
:sample-swing-groovy:integrationTestClasses
:sample-swing-groovy:jar
:sample-swing-groovy:integrationTest
  sample.swing.groovy.SampleTest > doNotTypeNameAndClickButton FAILED
    java.lang.AssertionError at SampleTest.groovy:57
  2 tests completed, 1 failed
:sample-swing-groovy:integrationTest FAILED
:buildDashboard UP-TO-DATE
:sample-swing-groovy:generateCoberturaReport SKIPPED
:sample-swing-groovy:performCoverageCheck SKIPPED
  FAILURE: Build failed with an exception.
  * What went wrong:
Execution failed for task ':sample-swing-groovy:integrationTest'.
&gt; There were failing tests. See the results at: file:///Users/aalmiray/dev/github/griffon2/samples/sample-swing-groovy/build/test-results/

```

You can appreciate that ‘integrationTestReport’ was not executed. Funny thing is that buildDashboard and cobertura tasks were indeed added to the task DAG. The cobertura plugin 2.0.3 uses task finalizers btw.

So my question is: where did I go wrong? Is there something missing in this configuration or did I hit a corner case for finalizer tasks?

TIA Andres

---

<div class="post-metadata">

**Author:** ![Perryn\_Fowler](https://avatars.discourse-cdn.com/v4/letter/p/82dd89/32.png) [@Perryn\_Fowler](https://discuss.gradle.org/u/Perryn_Fowler)\
**Post date:** [February 16, 2014, 2:18am UTC](https://discuss.gradle.org/t/finalizer-task-does-not-run-if-finalized-task-fails/1923/2 "2014-02-16T02:18:00Z")

</div>

Hi Andres,

At the moment Gradle does not support A.finalizedBy(B) together with B.dependsOn(A) and you will get the behaviour you observed.

Can you tell me more about why you want to do that?

cheers Perryn

---

<div class="post-metadata">

**Author:** ![Andres\_Almiray1](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/andres_almiray1/32/121_2.png) [@Andres\_Almiray1](https://discuss.gradle.org/u/Andres_Almiray1)\
**Post date:** [February 16, 2014, 10:27am UTC](https://discuss.gradle.org/t/finalizer-task-does-not-run-if-finalized-task-fails/1923/3 "2014-02-16T10:27:00Z")

</div>

Right. Marcin told me that having both settings would cause trouble, so I removed dependsOn from ‘integrationTestReport’ however the problem persists.

Originally I wrote the tasks so that ‘integrationTestReport’ would depend on ‘integrationTest’. Next I saw that the report was not generated if the tests failed, so I added the finalizedBy without removing dependsOn as I didn’t think leaving it would cause problems.

---

<div class="post-metadata">

**Author:** ![Perryn\_Fowler](https://avatars.discourse-cdn.com/v4/letter/p/82dd89/32.png) [@Perryn\_Fowler](https://discuss.gradle.org/u/Perryn_Fowler)\
**Post date:** [February 16, 2014, 11:02am UTC](https://discuss.gradle.org/t/finalizer-task-does-not-run-if-finalized-task-fails/1923/4 "2014-02-16T11:02:00Z")

</div>

ah, because you did this

```gradle
reportOn integrationTest

```

the ‘integrationTestReport’ task automatically ‘dependsOn integrationTest’ as documented [here](http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.TestReport.html)

FWIW I think your use case is reasonable. I will see if we can support it better. In the meantime try this instead:

```gradle
reportOn integrationTest.binResultsDir

```

---

<div class="post-metadata">

**Author:** ![Andres\_Almiray1](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/andres_almiray1/32/121_2.png) [@Andres\_Almiray1](https://discuss.gradle.org/u/Andres_Almiray1)\
**Post date:** [February 16, 2014, 1:37pm UTC](https://discuss.gradle.org/t/finalizer-task-does-not-run-if-finalized-task-fails/1923/5 "2014-02-16T13:37:00Z")

</div>

Thanks, the workaround is giving me the expected result.
