You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅地为多模块Android项目批量生成模块依赖图?

批量生成多模块依赖图的Gradle任务实现

针对你的NowInAndroid多模块项目,你可以在根项目的构建脚本中添加一个自定义聚合任务,自动为所有模块生成依赖图,完全适配CI环境执行:

Kotlin DSL(build.gradle.kts)实现

tasks.register("generateAllModuleDependencyGraphs") {
    description = "Generate dependency graph for every module in the project"
    group = "Module Graph"

    // 收集所有子模块的路径(排除根项目)
    val modulePaths = project.subprojects.map { it.path }

    modulePaths.forEach { modulePath ->
        // 生成无冲突的输出文件名,比如将`:feature:search`转为`feature_search_dependency_graph.gv`
        val outputFileName = modulePath.removePrefix(":").replace(":", "_") + "_dependency_graph.gv"
        val outputFile = file(outputFileName)

        // 为当前模块创建并配置依赖图生成任务
        val generateTask = tasks.named("generateModulesGraphvizText", Exec::class.java) {
            args = listOf(
                "-Pmodules.graph.output.gv=${outputFile.absolutePath}",
                "-Pmodules.graph.of.module=$modulePath"
            )
        }

        // 将当前模块的生成任务加入聚合任务的依赖
        dependsOn(generateTask)
    }
}

Groovy DSL(build.gradle)实现

如果项目仍使用Groovy构建脚本,对应代码如下:

tasks.register('generateAllModuleDependencyGraphs') {
    description = 'Generate dependency graph for every module in the project'
    group = 'Module Graph'

    // 收集所有子模块的路径
    def modulePaths = project.subprojects.collect { it.path }

    modulePaths.each { modulePath ->
        def outputFileName = modulePath.substring(1).replace(':', '_') + '_dependency_graph.gv'
        def outputFile = file(outputFileName)

        def generateTask = tasks.named('generateModulesGraphvizText', Exec) {
            args = [
                "-Pmodules.graph.output.gv=${outputFile.absolutePath}",
                "-Pmodules.graph.of.module=$modulePath"
            ]
        }

        dependsOn(generateTask)
    }
}

核心优势

  • 自动遍历模块:无需手动维护模块列表,subprojects会自动获取所有子模块
  • 无冲突命名:将模块路径转换为合法文件名,避免不同模块的输出文件覆盖
  • CI友好:只需调用单个任务generateAllModuleDependencyGraphs即可完成批量生成,无需额外shell脚本处理
  • 复用现有插件:直接基于Module Graph Assert插件的能力,无需额外开发

使用方法

在终端或CI流水线中执行以下命令:

./gradlew generateAllModuleDependencyGraphs

生成的.gv文件会保存在项目根目录,每个模块对应一个独立文件。

内容的提问来源于stack exchange,提问作者donturner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:30:12