如何在Gradle中添加与Maven属性类似的属性?
用例是这样的:我想要一个文件,声明回购依赖项的所有版本,以便它们在多模块项目的一个地方统一
compile group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'
在Maven中,您可以拥有如下属性:
<properties>
<jstlVersion>1.2</jstlVersion>
</properties>
可以使用Gradle的外部属性吗?或者只是将它们添加到grade.properties文件中?
根构建文件中定义的项目属性可用于子项目。因此,如果您在根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[编辑我已经更新了上述注释,以澄清实际行为] 最后一件事:Gradle还允许您通过依赖关系约束来控制可传递依赖关系的版本。如果您使用Gradle 4.6或更新版本,也可以导入Maven BOM。
发现这是一个可能的解决方案,尽管我真的不喜欢使用属性文件的相对路径。
第7点:https://proandroiddev.com/make-your-build-gradle-great-again-c84cc172a654#8029