0

我正在将现有的 Maven 构建迁移到 gralde 并面临这个问题。在 Maven pom.xml 中,spring propertyplaceholderConfig 值在 Maven 配置文件中指定。Maven 构建指定了三种类型的配置文件 dev、test 和 prod

我想在 gradle build 中实现相同的目标,但直到现在无法弄清楚如何在 gradle 中做到这一点

谢谢,马诺伊

4

1 回答 1

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 中定义的普通嵌套映射。

通过将命令行选项“配置文件”传递给您的 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 在这里添加更多逻辑,例如具有默认配置文件等。

希望有帮助,

问候,勒内

于 2012-06-04T23:35:56.867 回答