Gradle 应用举例
查找替换所有子项目的依赖库版本,并做替换。
allprojects { // 在所有项目中应用以下配置
repositories { // 配置仓库
maven { url 'http://xxx.com/repository/maven-public/' } // Maven 仓库的 URL
}
configurations.all { // 配置所有项目的依赖项
resolutionStrategy { // 配置依赖项解析策略
dependencySubstitution { // 配置依赖项替换规则
all { DependencySubstitution dependency -> // 对所有依赖项执行以下操作
def match = (dependency.requested.displayName =~ /com.xxx.xxx:(.+):(.+)/) // 使用正则表达式匹配请求的依赖项的 displayName
if (match.find()) { // 如果请求的依赖项匹配成功
if (findProject(':' + match.group(1)) != null) { // 如果目标项目在当前项目的子项目中存在
dependency.useTarget(project(':' + match.group(1))) // 使用子项目作为依赖项的目标
} else { // 如果目标项目不存在于当前项目的子项目中
def property = findProperty("MODULE_VERSION_" + match.group(1).toUpperCase()) // 使用 Gradle 属性(例如 MODULE_VERSION_<module>)来替换依赖项的版本号
if (property?.trim()) { // 如果属性值不为空
if (match.group(2) != property) { // 如果请求的版本号与属性值不一致
dependency.useTarget("com.xxx.xxx:" + match.group(1) + ":" + property) // 使用替换后的依赖项作为目标依赖项
}
}
}
}
}
}
}
}
}
用到的API:
allprojects:Gradle 语法中的一个闭包,表示应用该闭包内的配置到所有项目中。repositories:Gradle 语法中的一个闭包,用于配置项目中使用的仓库。在此例中,使用了 Maven 仓库。configurations.all:Gradle 语法中的一个闭包,表示配置所有项目的依赖项。resolutionStrategy:Gradle 语法中的一个闭包,用于配置 Gradle 解析依赖项时的策略。dependencySubstitution:Gradle 语法中的一个闭包,用于配置依赖项的替换规则。all:Gradle 语法中的一个方法,表示对所有依赖项执行以下操作。DependencySubstitution:Gradle API,表示对依赖项进行替换。dependency.requested.displayName:Gradle API,表示请求的依赖项的显示名称,例如 "com.htsc.android:module1:1.0.0"。findProject():Gradle API,用于在项目中查找具有给定名称的子项目。project():Gradle API,用于返回当前项目的子项目。findProperty():Gradle API,用于查找 Gradle 属性的值。dependency.useTarget():Gradle API,用于将依赖项替换为指定的目标依赖项。