Hi Pieter,

On Jul 7, 2008, at 11:08 AM, pieter.smit wrote:


hi Hans,

Firstly, thanks for gradle, i think it's great. I need some help
understanding how varable scoping works in gradle.

I've got some problems defining variables/tasks in the allprojects {} or
subprojects{} groups. When resolving variables, it seems that the last
project's variables are the ones that are resolved. Simple example follows:

// Copies the distrobution jar(s) to the collective distro directory
Closure distro = { task ->
  println "copy $task.project.name to colective"
  task.project.libs.archiveNames.each {archiveName ->
    ant.copy(file: task.project."$archiveName".archivePath, todir:
'collective')
  }
}

Closure simplePrint = { task ->
  println "i work when called directly, $task.project.name"
}

subprojects {
  usePlugin('java')
  type='jar'
  sourceCompatibility = 1.5
  targetCompatibility = 1.5
  version='1.0'

  createTask('printTest', simplePrint)
  createTask('distro', distro)

  task('libs').doLast {
    task('distro').execute()
  }

The task('distro') is always resolved against the current project. If you do:

task('libs').doLast { task ->
    task.project.task('distro').execute()
} or

task('libs').doLast { task ->
    task.project.distro.execute()
}

Gradle does what you want.

BTW: For your usage scenario it might be interesting to pay attention to a Groovy trap described in Appendix A.1 of the user's guide.

- Hans


  createTask("copyDist", dependsOn:'distro') {
  }
}

project(':subProjectA') {
  srcDirNames = ['']
}

project(':subProjectB') {
  srcDirNames = ['']
}

http://www.nabble.com/file/p18312735/example.tgz example.tgz

When I execute libs, the 'distro' task will always print out "copy
subProjectB to colective", and subProjectA's jar will not be in the
directory. It works correctly if i execute task 'copyDist' (both jars are
copied). The 'printTest' task also works as expected.

My problem is that i cannot always use the dependsOn method as I have some complex build requirements. It will make the build file a lot shorter and
more elegant if I could count on variable scoping.

It basically boils downto this: I cannot create tasks in the root project
that behaves differently when executed by subprojects based on certain
criteria (variables).

Regards,
Pieter
--
View this message in context: http://www.nabble.com/Gradle-variable- scope-tp18312735p18312735.html
Sent from the gradle-user mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email



--
Hans Dockter
Gradle Project lead
http://www.gradle.org





---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to