Gradle 应用举例

74 阅读2分钟

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:

  1. allprojects:Gradle 语法中的一个闭包,表示应用该闭包内的配置到所有项目中。
  2. repositories:Gradle 语法中的一个闭包,用于配置项目中使用的仓库。在此例中,使用了 Maven 仓库。
  3. configurations.all:Gradle 语法中的一个闭包,表示配置所有项目的依赖项。
  4. resolutionStrategy:Gradle 语法中的一个闭包,用于配置 Gradle 解析依赖项时的策略。
  5. dependencySubstitution:Gradle 语法中的一个闭包,用于配置依赖项的替换规则。
  6. all:Gradle 语法中的一个方法,表示对所有依赖项执行以下操作。
  7. DependencySubstitution:Gradle API,表示对依赖项进行替换。
  8. dependency.requested.displayName:Gradle API,表示请求的依赖项的显示名称,例如 "com.htsc.android:module1:1.0.0"。
  9. findProject():Gradle API,用于在项目中查找具有给定名称的子项目。
  10. project():Gradle API,用于返回当前项目的子项目。
  11. findProperty():Gradle API,用于查找 Gradle 属性的值。
  12. dependency.useTarget():Gradle API,用于将依赖项替换为指定的目标依赖项。