用於尋找程式碼中實際未使用的 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)