코드에서 실제로 사용되지 않는 Bazel 종속성을 찾기 위한 명령줄 도구입니다.
사용되지 않은 Bazel 종속성은 BUILD
파일에 있는 java_library
또는 java_binary
대상의 deps
필드에 있는 불필요한 항목입니다. 즉, 컴파일되는 코드가 실제로 해당 라이브러리에 대한 종속성이 없음을 의미합니다. 시간이 지남에 따라 코드가 변경되고 BUILD
파일이 해당 변경 사항을 반영하도록 업데이트되지 않아 사용되지 않는 종속성이 누적됩니다.
사용되지 않은 종속성:
로컬 빌드 및 동기화 시간 증가
CI 실행 시간 증가
더 큰 배포 아티팩트로 이어짐
사용되지 않는 종속성으로 인해 발생하는 문제는 프로그래밍 방식으로 이를 감지하고 제거할 수 있는 방법이 없다면 코드가 성장하고 오래될수록 더욱 악화됩니다. 다행히도 지금은 있습니다!
unused-deps.sh <bazelPath> <outputFile>
실행
bazelPath
는 Bazel 레이블 형식으로 분석할 대상 또는 디렉터리의 경로입니다. 이는 이 대상을 "분석"하거나 이 디렉터리 아래의 모든 대상을 분석한다는 의미일 수 있습니다.
outputFile
Buildozer 명령을 작성할 파일의 절대 경로입니다.
이 작업은 다소 시간이 걸릴 수 있습니다(우리 경험에 따르면 400만 줄의 Java에서 실행하는 데 약 6시간이 소요됩니다). 더 작은 하위 섹션을 분석하는 경우 훨씬 더 빠릅니다. 스크립트는 실행되는 빌드의 진행 상황을 인쇄하므로 남은 시간을 대략적으로 파악할 수 있습니다.
bash <outputFile>
과 함께 Buildozer 명령을 실행하여 감지된 사용되지 않는 종속성을 프로그래밍 방식으로 제거합니다.
bazel build <bazelPath>
사용하여 대상이 계속 컴파일되는지 확인합니다. 빌드가 실패하면 아래의 ** 문제 해결** 섹션을 읽어보세요.
> ./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)