On 15/01/2012, at 3:12 AM, Luke Daley wrote:
> I would have expected this to work:
>
> apply plugin: "java"
>
> repositories {
> mavenCentral()
> }
>
> dependencies {
> compile 'junit:junit:4.9'
> }
>
> task doIt {
> dependsOn configurations.compile
> doFirst {
> assert configurations.compile.state == Configuration.State.RESOLVED
> }
> }
>
> Instead it fails because the configuration is not resolved when the task
> executes.
>
> Using dependsOn configurations.compile.buildDependencies does not work
> either, same problem.
>
> I also tried dependsOn configurations.compile.files, which does trigger a
> resolve but then explodes because it tries to find a task with a name
> matching the absolute path of each dependency file.
>
> I stumbled upon this when answering a forum question that lead to me writing
> and trying the following:
>
> task unpack(type: Copy, dependsOn: configurations.compile) { task ->
> into "sdks"
> assert configurations.compile.state == Configuration.State.UNRESOLVED
> configurations.compile.incoming.afterResolve { ResolvableDependencies
> incoming ->
> incoming.files.each { File file ->
> if (file.name.endsWith(".zip")) {
> from (zipTree(file)) {
> into file.name - ".zip"
> }
>
I don't think trying to do configuration in response to a resolve event is a
good approach to configuration - it doesn't describe the dependency between the
task and its configuration logic very well. I think the solution to the above
problem would be to use a (regular) configuration task that executes before the
unpack task:
task configureSdks {
dependsOn configurations.compile
doLast {
configurations.compile.each {
if (it.name.endsWith(".zip") {
unpackSdks.from(zipTree(it) { into it.name - ".zip" }
}
}
}
}
task unpackSdks(type: Copy, dependsOn: configureSdks)
Given that such logic is so common, we should add some convenience methods to
the DSL for this. We've discussed this a bunch of times on this list.
--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com