user1016765
user1016765

Reputation: 3063

Gradle / Groovy properties

I would like to control 'global' config in Gradle build scripts using external property files on each build machine (dev, ci, uat,...) and specify the filename with a command line argument.

e.g. gradle -DbuildProperties=/example/config/build.properties

I specifically don't want to use gradle.properties as we have existing projects that already use this approach and (for example) we want to be able to amend database urls and jdbc drivers without having to change every project.

So far have tried:-

Properties props = new Properties() 
props.load(new FileInputStream("$filename")) 
project.setProperty('props', props) 

which works but has a deprecated warning, but I can't figure out how to avoid this.

Have also tried using groovy style config files with ConfigSlurper:-

environments {
    dev {
        db.security {
            driver=net.sourceforge.jtds.jdbc.Driver
            url=jdbc:someserver://somehost:1234/some_db
            username=userId
            password=secret
        }
    }
}

but the colons and forward slashes are causing exceptions and we don't want to have to mess up config with escape characters.

There must be a non-deprecated way to do this - can anyone suggest the 'right' way to do it?

Thanks

Upvotes: 5

Views: 6697

Answers (2)

user2625844
user2625844

Reputation:

Just to supplement the response given by @Steinar:

it's still possible to use next syntax:

project.ext.set('prop_name', prop_value)

in case you have several properties from file:

props.each({ project.ext.set(it.key, it.value)} )

Upvotes: 5

Steinar
Steinar

Reputation: 5950

You can get rid of the deprecated warning quite easily. The message you got probably looks something like this:

Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties. Deprecated dynamic property: "props" on "root project 'private'", value: "true".

It can be fixed by replacing:

project.setProperty('props', props) 

with

project.ext.props = props

Upvotes: 6

Related Questions