news 2026/9/13 11:20:02

如何调整模块依赖后用 graphUpdate 任务更新 nowinandroid 的模块依赖图?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何调整模块依赖后用 graphUpdate 任务更新 nowinandroid 的模块依赖图?

如何调整模块依赖后用 graphUpdate 任务更新 nowinandroid 的模块依赖图?

【免费下载链接】nowinandroidA fully functional Android app built entirely with Kotlin and Jetpack Compose项目地址: https://gitcode.com/GitHub_Trending/no/nowinandroid

在 nowinandroid(Now in Android)仓库中,每个模块都有自己的README.md,其中包含该模块的 Mermaid 依赖图。当你调整了某个模块的 Gradle 依赖后,这张图就与代码不同步了。仓库提供了graphUpdate这个 Gradle 任务,用于把最新的依赖关系重新写入各模块README.md中的依赖图区块。本文说明如何在本地手动执行这个任务,并验证更新结果。

graphUpdate 任务如何工作

依赖图并不是手写维护的,而是由构建逻辑生成的。任务的注册与实现位于 Graph.kt,整体分两步:

  1. graphDump任务:递归收集模块间的 ProjectDependency,把结果转成 Mermaid 文本,写到该模块的build/mermaid/graph.txt(图本体)和build/mermaid/legend.txt(图例)。
  2. graphUpdate任务:读取上一步的输出,用正则匹配各模块README.md中的<!--region graph--> ... <!--endregion-->区块,把区块内容整体替换为新的 Mermaid 图;如果模块还没有README.md,会按模板新建一个,模板里包含#模块路径``、## Module dependency graph标题和空的<!--region graph-->区块。

图里的线型按依赖配置区分:api配置用实线-->implementation用虚线-.->,其他配置(如baselineProfiletestedApks)会带标签的虚线。docs/ModularizationLearningJourney.md 也说明了这一点:

When modules dependencies change, module graphs are automatically updated by the Build.yaml workflow. You can also manually update the graphs by running thegraphUpdatetask.

另外,这些任务是在根项目的 RootPlugin.kt 中为所有子项目注册的,且仅在没有启用 isolated projects 时生效;没有 build 文件的模块会被跳过。

准备工作

  • 已获取 nowinandroid 仓库代码,并且当前工作区没有未处理的其他改动(避免后续git diff时混淆来源)。
  • 已调整好模块依赖,例如修改了某个build.gradle.kts中的api/implementation声明。
  • CI 侧使用的构建环境是 JDK 21(Zulu 21),见 Build.yaml 中的Set up JDK 21步骤;本地执行./gradlew时使用项目自带的 Gradle Wrapper 即可。

执行 graphUpdate

在仓库根目录运行:

./gradlew graphUpdate

该任务会对所有子项目执行:graphDump生成 Mermaid 文本,graphUpdate把文本写回对应模块的README.md。任务的副作用就是修改工作区中的**/README.md文件——这正是任务的设计用途,不需要额外参数。

如果你只想预览某模块生成的 Mermaid 内容而不改文件,可以直接运行graphDump,任务会输出生成的graph.txt路径到日志(logger.lifecycle打印build/mermaid/graph.txt的 URI)。

验证更新结果

检查 README.md 的变更

graphUpdate只替换<!--region graph--><!--endregion-->之间的内容,区块外的文字不受影响。用 git 查看被改动的文件:

git status -- "**/README.md" git diff -- "**/README.md"

:app模块 为例,更新后的区块形如(节选):

对照你修改的依赖声明,确认新增的线(如:app -.-> :some:module)已出现在图中。

用 CI 同款命令判断图是否已同步

Build.yaml 工作流中的 "Check Graphs" 步骤用下面的方式验证:先运行./gradlew graphUpdate,再执行

git add -- "**/README.md" && git diff --cached --quiet --exit-code -- "**/README.md"

如果在本地已经跑过graphUpdate,再次执行该命令时git diff --cached --quiet不会有输出且以 0 退出,说明依赖图与代码一致。CI 中该检查失败时,fork 提交的 PR 会收到错误信息:

Check Graphs failed, please update graphs with: ./gradlew graphUpdate

也就是说,CI 无法替 fork 自动更新图,需要你在本地运行./gradlew graphUpdate后把README.md的改动提交进去。

可选:定制图的范围

Graph.kt 支持两个 Gradle 属性来影响图的生成:

# 逗号分隔的模块路径列表,这些模块会从图中排除 graph.ignoredProjects=:some:module,:other # 逗号分隔的配置名,只有这些配置中的依赖会画进图里 graph.supportedConfigurations=api,implementation,baselineProfile,testedApks

graph.supportedConfigurations未设置时的默认值就是api,implementation,baselineProfile,testedApksgraph.ignoredProjects默认不排除任何模块。属性可以在gradle.properties或命令行(-Pgraph.ignoredProjects=...)中提供,改完后再运行./gradlew graphUpdate即可看到变化。

限制与注意点

  • graphUpdate的产物是每个模块README.md里的图区块,区块标记<!--region graph-->/<!--endregion-->被手工删除或改名后,任务无法定位替换位置,需要恢复这两个标记。
  • graphDump在 Gradle 配置阶段就会递归收集依赖关系;实现注释也提到该收集是递归执行、不复用中间值的,但注释说明对每个项目一般耗时不到 1 ms。
  • 在 CI 中,"Update Graphs" 步骤带continue-on-error: true,真正的失败判据是后续 "Check Graphs" 的 git diff 检查;仓库自身 PR 的图更新会由工作流自动提交(commit message 为🤖 Updates graphs),fork 的 PR 则必须自行提交图更新。

确认git diff --cached --quiet检查通过、README.md中的图与修改后的依赖声明一致后,就可以把**/README.md的改动随功能改动一起提交了。

【免费下载链接】nowinandroidA fully functional Android app built entirely with Kotlin and Jetpack Compose项目地址: https://gitcode.com/GitHub_Trending/no/nowinandroid

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 11:18:55

AERIS-10:把 10.5GHz 开源相控阵雷达从图纸搬到实验台

AERIS-10&#xff1a;把 10.5GHz 开源相控阵雷达从图纸搬到实验台 【免费下载链接】PLFM_RADAR Open-source, low-cost 10.5 GHz PLFM phased array RADAR system 项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR AERIS-10 是一套面向实验室和教学场景的开…

作者头像 李华
网站建设 2026/9/13 11:17:46

FLUENT在锂电池热失控仿真中的优势与应用

1. 项目概述&#xff1a;锂电池热失控仿真为何选择FLUENT 去年参与某动力电池Pack热管理项目时&#xff0c;我们团队在电芯级热失控仿真环节踩过不少坑。当时试过三种仿真工具&#xff0c;最终FLUENT以其在复杂多物理场耦合方面的优势脱颖而出。不同于常规的热仿真&#xff0c;…

作者头像 李华
网站建设 2026/9/13 11:16:31

软考网规:第十章网络规划与设计论文历年真题分布(已更新)

网络规划与设计论文历年真题分布(2009-2025) 一、历年论文真题 2025年11月 试题一:论智慧校园网络的规划与设计 论题二:论边缘计算架构在视频网络中的应用 2024年11月 试题一:论“网络去NAT”的规划与设计 试题二:论企业智能制造中的网络规划设计与实施 2023年11…

作者头像 李华
网站建设 2026/9/13 11:12:18

FPGA驱动AD9238采集并在VGA上实时显示波形的方法

简介&#xff1a;面向FPGA学习者的AD9238数据采集与VGA波形显示例程包&#xff0c;基于Cyclone IV E系列EP4CE6F17C8器件与Quartus 17.1环境&#xff0c;适合正在钻研FPGA与高速ADC接口、视频显示驱动的开发者。压缩包共167个文件&#xff0c;约4.91MB&#xff0c;核心为Verilo…

作者头像 李华