我正在将现有的Maven构建迁移到gralde并面临此问题。 在Maven pom.xml中,spring propertyplaceholderConfig值在Maven配置文件中指定。 Maven构建 指定三种类型的配置文件dev,test和prod
我想在gradle构建中实现同样的目标,但直到现在还无法弄清楚如何在gradle中完成它
谢谢, 的Manoj
答案 0 :(得分:1)
我认为如何使用gradle为现有的mvn配置文件建模有不同的选择。我在这里举一个例子:
假设你有一个类似的属性文件:
property1=$prop1 //prop1 and prop2 are placeholder for your environment specific values
property2=$prop2
现在,您可以在build.gradle文件中建模您的配置文件:
def profileProperties = [
test:[prop1:"testValue1", prop2:"testValue2"],
dev:[prop1:"devValue1", prop2:"devValue2"],
prod:[prop1:"prodValue1", prop2:"prodValue2"]
]
这只是在groovy中定义的普通嵌套映射。
将命令行选项'profile'传递给您的gradle call
gradle clean build -Pprofile=dev
您可以将您当前所处的环境传递给您的gradle项目。在您的构建脚本中,您可以通过将以下内容添加到构建文件来区分它:
def usedProfile = project.getProperty("profile")
processResources{
expand(profileProperties[usedProfile])
}
这将获取您定义的profileAttribute并读取环境属性的相应映射。此环境属性作为映射传递给expand filter方法,该方法是gradle API的一部分。有关扩展方法的详细信息,请查看http://gradle.org/docs/current/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:expand(java.util.Map。
一个简单的java项目的整个build.gradle文件现在看起来像这样:
apply plugin:'java'
def profileProperties = [
test:[prop1:"testValue1", prop2:"testValue2"],
dev:[prop1:"devValue1", prop2:"devValue2"],
prod:[prop1:"prodValue1", prop2:"prodValue2"]
]
def usedProfile = project.getProperty("profile")
processResources{
expand(profileProperties[usedProfile])
}
这只是一个草稿,当然你可以在这里使用所有groovy善良来添加更多逻辑,比如拥有默认配置文件等。
希望有所帮助,
的问候, 勒内