I'm trying to replace a resource file in my WAR plugin task with Gradle.
Basically I have two resource files:
database.properties
database.properties.production
What I want to achieve is replace 'database.properties' with 'database.properties.production' in the final WAR file under WEB-INF/classes.
I tried a lot of things but the most logical to me was the following which does not work:
war {
webInf {
from ('src/main/resources') {
exclude 'database.properties'
rename('database.properties.production', 'database.properties')
into 'classes'
}
}
}
But this causes all other resource files to be duplicate, including a duplicate database.properties (two different files with same name) and still database.properties.production is in the WAR.
I need a clean solution without duplicates and without database.properties.production in WAR.
If you can't make the decision at runtime (which is the recommended best practice for dealing with environment-specific configuration), eachFile
may be your best bet:
war {
rootSpec.eachFile { details ->
if (details.name == "database.properties") {
details.exclude()
} else if (details.name == "database.properties.production") {
details.name = "database.properties"
}
}
}
PS: Gradle 1.7 adds filesMatching(pattern) { ... }
, which may perform better than eachFile
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With