Maven属性的等效Gradle

时间:2018-07-26 14:57:32

标签: maven gradle

如何在Gradle中添加类似于Maven的属性?

用例是这样的:我想拥有一个文件,该文件声明所有版本的repo依赖关系,以便将它们统一在一个地方以用于多模块项目

compile group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'

在Maven中,您可以具有以下属性:

<properties>
    <jstlVersion>1.2</jstlVersion>
</properties>

可以使用Gradle的外部属性吗?或者只是将它们添加到gradle.properties文件中?

2 个答案:

答案 0 :(得分:2)

在根构建文件中定义的项目属性可用于子项目。因此,如果您在根 build.gradle 文件中拥有此文件,

ext.commonsLangVersion = "2.4"

然后您可以在子项目的dependencies {}块中使用它,如下所示:

dependencies {
    implementation "commons-lang:commons-lang:${commonsLangVersion}"
}

您还可以在根 gradle.properties 文件而不是根构建文件中定义此类属性。您以相同的方式使用它们。

如果您确实需要将版本放在单独的文件中,则可以这样做。只需将以下行添加到根构建文件中:

apply from: "dependencies.gradle"

dependencies.gradle 文件中,您可以定义额外的项目属性,就像它们直接在根构建文件中一样:

ext.commonsLangVersion = "2.4"

注意通常,在构建脚本中设置的值优先于 gradle.properties 中的值。但是,如果您如上所述在根构建脚本中设置一个值,则 gradle.properties 中的任何匹配值都将在子项目中覆盖它

此行为有些令人困惑且独特。对于与Gradle单项目构建一致的行为,您需要在根构建脚本中使用以下内容:

allprojects {
    apply from: "dependencies.gradle"
}

一般来说,任何给定的属性都应在构建脚本 gradle.properties 中声明/定义。如果用户要覆盖特定的属性值,可以在 $ USER_HOME / .gradle / gradle.properties 中进行。

[ EDIT ”,我已经更新了上面的注释,以阐明实际行为]

最后一件事情:Gradle还允许您通过dependency constraints控制传递依赖的版本。如果您使用的是Gradle 4.6或更高版本,也可以import Maven BOMs

答案 1 :(得分:0)

发现这是一个可能的解决方案,尽管我不太喜欢使用属性文件的相对路径。

此处的第7点: https://proandroiddev.com/make-your-build-gradle-great-again-c84cc172a654#8029