dRu
dRu

Reputation: 48

gradle configurations for tasks

I have gradle build script with plugins: groovy, jacoco and maven.

In dependencies beside jars is:

testCompile group: 'org.spockframework', name: 'spock-core', version: '0.7-groovy-2.0'

Now when I created task integTest(Type: Test) and :

configurations{
    integTestCompile {
        extendsFrom testCompile
    }
    integTestRuntime {
        extendsFrom integTestCompile
    }
}

everything works OK, but I wanted to add some modularization and now all integTest tasks are created that way:

task "${module}_${suite}" (type: Test)

and when I tried implement same changes in configurations I got an error:

Could not find method ModuleName_Suite1Runtime() for arguments [build_55s7pmm2c6k8n8e2n1i59t3b5b$_run_closure5_closure28_closure29_closure31@3394214b] on root project 'projectName'.

for

configurations {
            "${module}_${suite}Compile"{
                extendsFrom testCompile
            }
            "${module}_${suite}Runtime"{
                extendsFrom "${module}_${suite}Compile"
            }
 }

and another error with different configuration:

No signature of method: java.lang.String.extendsFrom() is applicable for argument types: (org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated) values: [configuration ':testCompile']

for

configurations{
   "${module}_${suite}Compile".extendsFrom(testCompile)
   "${module}_${suite}Runtime".extendsFrom("${module}_${suite}Compile")
}   

Without "taskName+Compile" and "taskName+Runtime" I got ClassNotFound Exception for spock specification. So I'm sure I need this like in previous version.

I'm pretty sure it's something straightforward, but I can't find any tip in google. Any help would be appreciated.

Upvotes: 0

Views: 919

Answers (1)

Mark Vieira
Mark Vieira

Reputation: 13466

The syntax being used inside the configurations {...} block is implemented via some Groovy magic that unfortunately is not called when you use a String literal. Instead, if you want to create a configuration with a dynamic name you'll want to call the create() method on the ConfigurationsContainer.

configurations.create("${module}_${suite}Compile") {
    extendsFrom configurations.testCompile
}

Upvotes: 1

Related Questions