On 11/05/2011, at 11:14 PM, Leo Mekenkamp wrote:
> Hi all,
>
> Is there a reason why there is no distinction between the separator between
> two project names and the separator between a project name and a task name?
> They both are ":".
>
> Reason I ask is because of the example in
> http://www.gradle.org/tutorial_using_tasks.html:
>
>
> gradle.taskGraph.whenReady {taskGraph ->
> if (taskGraph.hasTask(':release')) {
> version = '1.0'
> } else {
> version = '1.0-SNAPSHOT'
> }
> }
> This example does not function properly when used in in a sub project. For
> sub projects one needs to (for instance) prepend getPath() like this:
>
>
> gradle.taskGraph.whenReady {taskGraph ->
> if (taskGraph.hasTask(getPath() + ':release')) {
> version = '1.0'
> } else {
> version = '1.0-SNAPSHOT'
> }
> }
> Unfortunately, this would mean that you cannot simply use this example in an
> allprojects { } block, because getPath() returns ":" for the root project,
> and there is never a task "::release", only a task ":release".
In allprojects { }, getPath() should be returning the path of the current
project. Is this not the case?
As an alternative, you can pass in a task object into hasTask(), so you don't
need to worry about paths and names. For example:
allprojects {
gradle.taskGraph.whenReady { graph ->
if (graph.hasTask(release)) { ... } else { ... }
}
}
--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com