我正在将现有的 Maven 构建迁移到 gralde 并面临这个问题。在 Maven pom.xml 中,spring propertyplaceholderConfig 值在 Maven 配置文件中指定。Maven 构建指定了三种类型的配置文件 dev、test 和 prod
我想在 gradle build 中实现相同的目标,但直到现在无法弄清楚如何在 gradle 中做到这一点
谢谢,马诺伊
我认为有不同的选项可以使用 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 中定义的普通嵌套映射。
通过将命令行选项“配置文件”传递给您的 gradle 调用
gradle clean build -Pprofile=dev
您可以将当前所处的环境传递给您的 gradle 项目。在构建脚本中,您可以通过将以下内容添加到构建文件来区分这一点:
def usedProfile = project.getProperty("profile")
processResources{
expand(profileProperties[usedProfile])
}
这将获取您定义的 profileAttribute 并读取相应的环境属性映射。此环境属性作为映射传递给扩展过滤器方法,该方法是 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 goodness 在这里添加更多逻辑,例如具有默认配置文件等。
希望有帮助,
问候,勒内