Ant targets get turned into 
native gradle tasks

build-rpm depends on checkout and build-tarball

build-tarball depends only upon build-war

Gradle does not attempt to preserve Ant's partial ordering logic of C depends 
on A "then" B, so it gets treated as C depends on A "and" B such that A and B 
just need to be run in any order before C.


Ant lets you do "interesting" things, like C depends on A, C; and D depends on 
B, C, A so that running "ant C" runs things in the A,B,C order, but running 
"ant D" will run them in B,A,C,D.  So that if C really needs B and A run in the 
other order to function properly, that constraint is not satisfied.  Now, 
sometimes that ad-hoc ordering adjustment by invoking D is what you want, but 
generally not.

With your example, gradle will always run build-tarball first, because as an 
arbitrary tie-breaker, it (currently) uses alphabetical ordering to determine 
which to run first, but in the future it will likely run both tasks in parallel.

A solution (not necessarily a great one) is to see what tasks are explicitly 
being asked to be invoked from the user's command line.

In the gradle build file (somewhere after the ant.importBuild line) you would 
do something like:

'build-rpm' {
  if (gradle.startParameter.taskNames.contains(name)) { 
'build-tarball'.dependsOn 'checkout'}
  if 
(gradle.startParameter.taskNames.contains(path)) { 
'build-tarball'.dependsOn 'checkout'}
}

This will only catch direct invocations of build-rpm or :build-rpm as part of 
the command line tasks, so it is a bit fragile, but does provide conditional 
dependency adjustments for individual tasks that are specialized like this.

You might consider raising this question in the forums, since there is more 
traffic there for user questions.


-Spencer




>________________________________
> From: Neil Chaudhuri <[email protected]>
>To: "[email protected]" <[email protected]> 
>Sent: Tuesday, March 20, 2012 12:38 PM
>Subject: [gradle-user] Dependency Sequence Lost Between Ant Target and Gradle 
>Task
> 
>
>I would like to checkout a tag from SVN and then build an RPM. I've written 
>the checkout as a Gradle task, and the RPM build is in an existing Ant target. 
>I want the Gradle task to precede the Ant target. Here are the definitions:
>
>
>Gradle
>ant.importBuild "build.xml"
>task checkout << {
>…
>}
>
>
>Ant (build.xml)
><target name="build-tarball" depends="build-war" description="Create the 
>source tarball used to create the RPM.">
>       …
></target>
><target name="build-rpm" depends="checkout,build-tarball">
>        …
></target>
>
>
>When I run the Ant target build-rpm from Gradle, I want the Gradle checkout 
>task to run, then the build-tarball Ant target, and then the build-rpm target. 
>Unfortunately, checkout never happens, and build-tarball (with its 
>dependencies) starts running. Naturally it fails.
>
>
>Any insight into how to get the dependency sequence to be honored is 
>appreciated.
>
>
>Thanks. 
>
>
>
>
>
>

Reply via email to