用于查找代码中实际未使用的 Bazel 依赖项的命令行工具。
未使用的 Bazel 依赖项是BUILD
文件中java_library
或java_binary
目标的deps
字段中不必要的条目,这意味着正在编译的代码实际上对该库没有任何依赖项。随着时间的推移,未使用的依赖项会随着代码更改而累积,并且BUILD
文件不会更新以反映这些更改。
未使用的依赖项:
增加本地构建和同步时间
增加 CI 运行时间
导致更大的部署工件
随着代码的增长和老化,未使用的依赖项带来的问题只会变得更糟......除非有一种方法可以以编程方式检测和删除它们。幸运的是,现在有!
运行unused-deps.sh
bazelPath
是要以 Bazel 标签格式分析的目标或目录的路径。这可能意味着“分析”该目标或分析该目录下的所有目标。
outputFile
是要写入 Buildozer 命令的文件的绝对路径
这可能需要一段时间(根据我们的经验,在 400 万行 Java 上运行它大约需要六个小时)。如果您正在分析较小的小节,速度应该会快得多。该脚本将打印出其运行的构建进度,以便您可以大致了解还剩多少时间。
使用bash
运行 Buildozer 命令,以编程方式删除检测到的未使用的依赖项
使用bazel build
验证目标是否仍可编译。如果您的构建失败,请阅读下面的 ** 故障排除** 部分。
> ./unused-deps.sh //src/main/java/com/stripe/payments/server/worker/... worker-commands.txt ... Ignored dependencies: 3802 ------------------------------ Considered dependencies: 467 Used dependencies: 432 (93%) Unused dependencies: 35 (7%) ------------------------------ Time elapsed: 0 seconds Wrote buildozer commands to remove unused dependencies to: worker-commands.txt > bash worker-commands.txt fixed src/main/java/com/stripe/payments/server/worker/db/BUILD ... fixed src/main/java/com/stripe/payments/server/worker/workflows/interfaces/BUILD > bazel build //src/main/java/com/stripe/payments/server/worker/db/... ... INFO: Build completed successfully, 2867 total actions
该工具不支持以下功能:
第三方依赖项 (#2)
Scala (#3) 和 Kotlin (#4)
Java 测试目标 (#5)