Thanks, that seems to work fairly well. I had thought doFirst just adds the action to the start of the action queue rather than executing before the task itself but obviously that was an incorrect assumption.
It still leaves me with the smaller issue of using a non-public API to execute the tasks but I guess I can live with that. On 18 May 2011 13:43, Ken Sipe <[email protected]> wrote: > I haven't tried this... but here's an idea :) > > integrationTest.doFirst { > tasks.jettyRun.execute() > } > > integrationTest.doLast { > tasks.jettyStop.execute() > } > > you can probably shorten it... and as you can see... jetty will only run if > the integrationTest runs... so if it skips or is up-to-date, you're good. > > > Ken Sipe | [email protected] | blog: http://kensipe.blogspot.com > > > > On May 17, 2011, at 10:34 PM, Glen Stampoultzis wrote: > > Hi, > > I have a little problem with getting a task to run after execution of > another task. In this case I have a task called integrationTest. What I > want to do is use the Jetty plugin to execute the jettyRun task before > running the integrationTest task and to run jettyStop task after it has > finished. > > integrationTest.dependsOn(jettyRun) lets me easily start the jetty server > but there doesn't seem to be a good way of hooking in jettyStop at the end. > > Using integrationTest.doLast { jettyRun.execute() } lets me hook in an > action at the end of the execution chain but this suffers from a couple of > problems. Firstly if integrationTest is up-to-date then the actions aren't > run so the server doesn't stop. Secondly executing a task this way seems > to be non-standard (execute is a private API). > > I found a solution to the first problem with the following code: > > gradle.taskGraph.afterTask { Task task, TaskState state -> > if (task.name == 'integrationTest') { > jettyStop.execute(); > } > } > > but this still suffers from the second issue. Is there a clean way do > this? > > > > > > >
