如何在Gradle中添加类似于Maven的属性?
用例是这样的:我想拥有一个文件,该文件声明所有版本的repo依赖关系,以便将它们统一在一个地方以用于多模块项目
compile group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'
在Maven中,您可以具有以下属性:
<properties>
<jstlVersion>1.2</jstlVersion>
</properties>
可以使用Gradle的外部属性吗?或者只是将它们添加到gradle.properties文件中?
答案 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