是否有Gradle插件可检查内部模块传递依赖的版本一致性?
实现Gradle内部依赖版本一致性检查的方案
一、可用的现有Gradle插件
1. Gradle原生依赖约束(Dependency Constraints)
无需额外插件,直接在facade-app的构建脚本中通过依赖约束强制指定内部模块版本,一旦传递依赖版本不匹配,构建会直接失败:
dependencies { constraints { implementation '你的组ID:core:统一版本号' implementation '你的组ID:level_1-app:统一版本号' implementation '你的组ID:level_2-app:统一版本号' } }
这种方式是Gradle原生支持的,能直接确保指定内部模块的所有传递依赖都使用设定的统一版本,版本不符时会阻断构建流程。
2. nebula.dependency-lock插件
该插件可生成依赖锁定文件,锁定所有依赖版本(可限定只锁定内部模块)。在facade-app中启用后,若内部模块的传递依赖版本发生变化或不一致,构建会报错:
plugins { id 'nebula.dependency-lock' version '17.3.0' } dependencyLock { includeGroups = ['你的组ID'] // 仅锁定内部模块所在的组 }
执行./gradlew generateLock生成锁定文件,后续构建时若内部依赖版本不匹配则会终止构建。
二、自定义实现(按需灵活配置)
如果需要更定制化的逻辑(比如仅警告不阻断、自定义检查范围),可以编写Gradle自定义任务:
tasks.register('checkInternalDependencyVersions') { doLast { def targetModules = ['core', 'level_1-app', 'level_2-app'] def recordedVersions = [:] configurations.runtimeClasspath.resolvedConfiguration.resolvedArtifacts.each { artifact -> def moduleInfo = artifact.moduleVersion.id if (targetModules.contains(moduleInfo.name)) { if (recordedVersions.containsKey(moduleInfo.name)) { if (recordedVersions[moduleInfo.name] != moduleInfo.version) { // 选择抛出异常阻断构建,或打印警告 throw new GradleException("模块 ${moduleInfo.name} 版本不一致:已记录 ${recordedVersions[moduleInfo.name]},当前发现 ${moduleInfo.version}") // 替换为以下代码可仅输出警告: // logger.warn("模块 ${moduleInfo.name} 版本不一致:已记录 ${recordedVersions[moduleInfo.name]},当前发现 ${moduleInfo.version}") } } else { recordedVersions[moduleInfo.name] = moduleInfo.version } } } } } // 将检查任务绑定到构建生命周期 tasks.build.dependsOn(checkInternalDependencyVersions)
该任务会遍历facade-app的运行时依赖,检查指定内部模块的版本是否统一,按需触发错误或警告。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

