Snorky35
Snorky35

Reputation: 425

Gradle task dependency order

I have a problem with a custom gradle task : i would like to copy my android jar library and rename it after that it as executed a 'clean build' Here is how i defined it :

task('CreateJar', type: Copy, dependsOn: [':mylibmodule:clean', ':mylibmodule:build']){
  doLast {
    from('build/intermediates/bundles/release/')
    into('libs')
    include('classes.jar')
    rename('classes.jar', 'MyLib.jar')
  }
}

The problem is that in the gradle log results, the 'clean' is done after the 'build' task, so that the lib is never copied to the destination folder :

...
:mylibmodule:testReleaseUnitTest
:mylibmodule:test
:mylibmodule:check
:mylibmodule:build
:mylibmodule:clean
:mylibmodule:CreateJar NO-SOURCE

I have also tried to change the order of tasks in the 'dependsOn:[]', but it does not change anything... Does anyone has any idea of where is my mistake ? Thanks in advance

Upvotes: 4

Views: 6037

Answers (1)

Vampire
Vampire

Reputation: 38734

The dependsOn list does not impose any ordering guarantees. Usually what is listed first is executed first if there are not other relations that actually do impose ordering guarantees.

(One example is if clean depends on build, then it doesn't matter how you define it in that dependsOn attribute, becuase build will always be run before clean. That this is not the case is clear to me, thus in parentheses, just to clarify what I mean.)

To determine why finally build is run before clean I cannot say without seeing the complete build script. From what you posted it is not determinable.

Maybe what you are after is clean.shouldRunAfter build or clean.mustRunAfter build which define an ordering constraint without adding a dependency. So you can run each task alone, but if both are run, then their order is defined as you specified it. The difference between those two is only relevant if parallelizing task execution, then should run after means they could run in parallel iirc, must run after does not allow that.

Upvotes: 6

Related Questions