title: Gradle, dependsOn ordering
body: <p>Confused by ordering in Gradle. I'm a novice, previously used Ant for builds, having a play with Gradle which may explain some of this</p>
  
  <p>Brief background (in case anyone would be asking "why would you do that").
  We ship a Java WebStart app in a war file. Java 7 (-40 onwards) is prompting users about incorrectly formatted jar files with missing elements. I would like to automate a process that gets the war; extracts the jars for JavaWS from 'bin' folder; adds elements to the Manifest
  Later I'll get to re-signing the jars and re-assembling the war, but for now I just want to get to adding the Manifest entries.</p>
  
  <p>My problem is that I have defined tasks that have dependsOn elements but the tasks seem to run in the wrong order (see gradle file below).
  What I expect is the tasks to run in sequence: delete dir; get war; unwar the war; add elements to the jar.
  What I see (from log file) is: elements are added to jar, effectively this creates a new jar, the dir is deleted and the war is unwar'ed so I end up with the original war file contents.</p>
  
  <p>I checked: <a href="https://stackoverflow.com/questions/17617791/gradle-task-to-call-other-tasks-in-order">Gradle Task To Call Other Tasks In Order</a> however, I don't seem able to use mustRunAfter at all, could be related to version of gradle I have, but anyway I don't really want to control order of disparate tasks, I would prefer (in my Ant based thinking) that I can define the order I want by having tasks depend on each other.</p>
  
  <p>Can anyone see the flaw in my build file?
  NOTE: if I remove the "dependsOn" from the resignclientjars task and run it manually after running the other tasks, it all works fine and I get my jars with the new elements in the Manifest, so I have a workable workaround, but would prefer to know what I'm doing wrong here.</p>
  
  <pre><code>task (deletework, type: Delete) {
      delete 'workYYY'
  }
  
  task (getlaganwar, type: Copy, dependsOn: deletework) {
      from "d:/dev/v8-0-5/wars"
      into "workYYY"
      include 'lagan.war'
  }
  
  task (unwar, type: Copy, dependsOn: getlaganwar) {
      from zipTree(file('workYYY/lagan.war'))
      into file("workYYY/lagan")
  }
  
  task (resignclientjars, type: Copy, dependsOn: unwar) {
  //task (resignclientjars, type: Copy) {
  
  //  mustRunAfter unwar
  
      def workDir = file("workYYY/lagan")
      def binDir = file(new File(workDir, "bin"))
  
      def collection = files { binDir.listFiles() }
      collection.each { 
          File jarFile = new File(binDir, it.name)
          ant.echo(message: "updating:${jarFile.absolutePath}")
          ant.jar(jarfile: jarFile, update: 'true') {
              manifest {
                  attribute(name: 'Implementation-Title', value: 'Lagan Enterprise')
                  attribute(name: 'Implementation-Vendor', value: 'Lagan Enterprise')
                  attribute(name: 'Implementation-Version', value: 'Lagan Enterprise')
                  attribute(name: 'Application-Name', value: 'Lagan Enterprise')
                  attribute(name: 'Permissions', value: 'all-permissions')
              }
          }
      }
  }
  
  //unwar.mustRunAfter getlaganwar
  //getlaganwar.mustRunAfter deletework
  //resignclientjars.mustRunAfter getlaganwar
  </code></pre>
  
  <p>Debug Output contains the following:</p>
  
  <pre><code>[sts] -----------------------------------------------------
  [sts] Starting Gradle build for the following tasks: 
  [sts]      :resignclientjars
  [sts] -----------------------------------------------------
  
  12:06:19.658 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\DebugWinIEBrowser.jar
  12:06:19.666 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\DebugWinMSWord.jar
  12:06:19.670 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\WinIEBrowser.jar
  12:06:19.674 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\WinMSWord.jar
  
  12:06:19.690 [INFO] [org.gradle.execution.TaskNameResolvingBuildConfigurationAction] Selected primary task ':resignclientjars'
  12:06:19.692 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on task artifact state cache (D:\dev\util\java7-clientjars\.gradle\1.5\taskArtifacts).
  12:06:19.692 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
  12:06:19.692 [INFO] [org.gradle.BuildLogger] Tasks to be executed: [task ':deletework', task ':getlaganwar', task ':unwar', task ':resignclientjars']
  
  12:06:19.693 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':deletework'
  12:06:19.693 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':deletework' is up-to-date
  12:06:19.694 [INFO] [org.gradle.api.internal.changedetection.ShortCircuitTaskArtifactStateRepository] Task ':deletework' has not declared any outputs, assuming that it is out-of-date.
  12:06:19.694 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] task ':deletework' is not up-to-date
  
  12:06:19.695 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':deletework'.
  12:06:19.695 [DEBUG] [org.gradle.api.internal.file.copy.DeleteActionImpl] Deleting D:\dev\util\java7-clientjars\workYYY
  
  12:06:19.934 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':deletework'
  12:06:19.934 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :getlaganwar
  12:06:19.934 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':getlaganwar'
  12:06:19.936 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':getlaganwar' is up-to-date
  
  12:06:19.942 [INFO] [org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository] Executing task ':getlaganwar' due to:
  Output file D:\dev\util\java7-clientjars\workYYY for task ':getlaganwar' has changed.
  Output file D:\dev\util\java7-clientjars\workYYY\lagan.war has been removed for task ':getlaganwar'.
  12:06:19.942 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] task ':getlaganwar' is not up-to-date
  
  12:06:19.944 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':getlaganwar'.
  
  12:06:20.564 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':getlaganwar'
  12:06:20.565 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :unwar
  12:06:20.565 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':unwar'
  12:06:20.586 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':unwar' is up-to-date
  12:06:20.588 [DEBUG] [org.gradle.api.internal.changedetection.DefaultFileCacheListener] Can cache files for ZIP 'D:\dev\util\java7-clientjars\workYYY\lagan.war'
  12:06:20.588 [DEBUG] [org.gradle.api.internal.changedetection.DefaultFileCacheListener] Can cache files for file 'D:\dev\util\java7-clientjars\workYYY\lagan'
  12:06:24.096 [INFO] [org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository] Executing task ':unwar' due to:
  Output file D:\dev\util\java7-clientjars\workYYY\lagan for task ':unwar' has changed.
  
  12:06:24.097 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] task ':unwar' is not up-to-date
  
  12:06:24.100 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':unwar'.
  
  12:06:27.863 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':unwar'
  12:06:27.863 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :resignclientjars
  12:06:27.864 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':resignclientjars'
  12:06:27.864 [INFO] [org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter] Skipping task ':resignclientjars' as it has no source files.
  12:06:27.864 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':resignclientjars'
  12:06:27.864 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :resignclientjars UP-TO-DATE
  12:06:27.865 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskGraphExecuter] Timing: Executing the DAG took 8.173 secs
  12:06:27.865 [LIFECYCLE] [org.gradle.BuildResultLogger] 
  12:06:27.865 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD SUCCESSFUL
  12:06:27.865 [LIFECYCLE] [org.gradle.BuildResultLogger] 
  12:06:27.866 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 8.886 secs
  </code></pre>