Fedor Malyshkin
Fedor Malyshkin

Reputation: 58

Skip variable checking in gradle configuration phase

I have some gradle script where i read some properties file (differen file in different execution configurations) and assign Properties obect to "ext" property in each task.

task provisionMongoDBCopyDockerfile(type: Copy, dependsOn: 'readTestConfiguration') {
        from "${projectDir}/deployment/scripts/Dockerfile.mongodb"
        into "/tmp/stand/mondodb"
        expand(ext.stand)
        filteringCharset = 'UTF-8'
    }

    task readTestConfiguration () {
        def props = loadStandProperties('test')
        println props
        tasks.each {
            it.ext.stand = props
            println  it.ext
        }
    }

but when i run gradle script i get this error: "Cannot get property 'stand' on extra properties extension as it does not exist" in line with "expand(ext.stand)". How can i solve this problem. I don't want to put all configuration parameters in "gradle.properties" and change it from configuration to configuration.

Upvotes: 1

Views: 433

Answers (1)

Michael Easter
Michael Easter

Reputation: 24468

Consider the following (using Gradle 2.14.1). This effectively sets up a dependency in Configuration phase. Also it uses project.ext versus tasks.ext.

def readTestConfiguration = {
    def props = loadStandProperties('test')
    println props
    project.ext.stand = props
}

def loadStandProperties (def env) {
    // use mock data
    return ["foo": "bar"]
}

tasks.whenTaskAdded { Task task ->
    if (task.name == "provisionMongoDBCopyDockerfile") {
        readTestConfiguration()
    }
}

task provisionMongoDBCopyDockerfile(type: Copy) {
    from "${projectDir}/in"
    into "${projectDir}/out"
    expand(project.ext.stand) 
}

Upvotes: 1

Related Questions