実際にはコード内で使用されていない Bazel 依存関係を検索するためのコマンドライン ツール。
未使用の Bazel 依存関係は、 BUILD
ファイル内のjava_library
またはjava_binary
ターゲットのdeps
フィールド内の不要なエントリです。これは、コンパイルされるコードが実際にはそのライブラリに依存関係を持たないことを意味します。時間の経過とともに、未使用の依存関係がコード変更として蓄積され、 BUILD
ファイルはそれらの変更を反映するように更新されません。
未使用の依存関係:
ローカルのビルドと同期の時間を増やす
CI の実行時間を増やす
デプロイメントのアーティファクトが大きくなる可能性がある
未使用の依存関係によってもたらされる問題は、プログラムで検出して削除する方法がない限り、コードが成長し古くなるにつれて悪化するだけです。幸いなことに、今はあります!
unused-deps.sh
を実行します。
bazelPath
Bazel ラベル形式で分析するターゲットまたはディレクトリへのパスです。これは、このターゲットを「分析」することを意味するか、このディレクトリの下にあるすべてのターゲットを分析することを意味します。
outputFile
Buildozer コマンドを書き込むファイルへの絶対パスです。
これには時間がかかる場合があります (私たちの経験では、400 万行の Java で実行すると約 6 時間かかります)。より小さなサブセクションを分析している場合は、はるかに高速になるはずです。スクリプトは実行中のビルドの進行状況を出力するため、残り時間をおおよそ把握できます。
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)