개요
Bazel 프로젝트는 사용자의 요구에 맞춰 계속 발전하고 있으며, 이에 따라 2024년 업데이트를 공유하고자 합니다.
이 로드맵은 Bazel 개발의 현재 이니셔티브와 향후 예측을 설명하여 현재 우선순위와 진행 중인 프로젝트를 파악할 수 있도록 합니다.
Bazel 8.0 출시
2024년 말에 Bazel 8.0 장기 지원 (LTS)을 제공할 계획입니다. 다음 기능이 구현될 예정입니다.
Bzlmod: 외부 종속 항목 관리 시스템
Bzlmod는 전이 종속 항목을 자동으로 확인하여 프로젝트가 빠르고 리소스 효율성을 유지하면서 확장될 수 있도록 합니다.
Bazel 8에서는 WORKSPACE 지원이 기본적으로 사용 중지됩니다 (여전히 --enable_workspace를 사용하여 사용 설정할 수 있음). Bazel 9에서는 WORKSPACE 지원이 삭제됩니다. Bazel 7.1부터 --noenable_workspace를 설정하여 새로운 동작을 선택할 수 있습니다.
Bazel 8.0에는 다음과 같은 Bazel의 외부 종속 항목 관리 기능이 여러 가지 개선됩니다.
- 새 플래그
--enable_workspace를false로 설정하여 WORKSPACE 기능을 완전히 사용 중지할 수 있습니다. - 새 디렉터리 감시 API (#21435, Bazel 7.1에 제공됨)
- 종속 항목 버전 업데이트 전반에서 작업의 캐시 가능성을 개선하기 위해 정식 저장소 이름을 생성하는 스키마가 개선되었습니다. (#21316, Bazel 7.1에 제공됨)
- 공유 저장소 캐시가 개선되었습니다 (#12227 참고).
- 공급업체 및 오프라인 모드 지원 — 사용자가 미리 다운로드한 종속 항목으로 빌드를 실행할 수 있습니다 (#19563 참고).
- 잠금 파일의 병합 충돌이 줄었습니다 (#20396).
- 분할된 MODULE.bazel (#17880)
- 모듈 확장 프로그램에서 생성된 저장소 재정의 허용 (#19301)
- 문서 (예: #18030, #18521) 및 이전 가이드와 이전 도구가 개선되었습니다.
원격 실행 개선사항
- 비동기 실행 지원을 추가하여 플래그
--jobs를 사용하여 병렬 처리를 늘려 원격 실행 속도를 높입니다. - 새로운 소형 실행 로그를 통해 캐시 누락을 더 쉽게 디버그하고, 크기를 100배 줄이며 런타임 오버헤드를 크게 줄입니다 (#18643 참고).
- 디스크 캐시에 가비지 컬렉션을 구현합니다 (#5139 참고).
- 원격 출력 서비스를 구현하여 임의 빌드 출력을 지연 다운로드할 수 있도록 합니다 (#20933 참고).
Android, C++, Java, Python, Proto 규칙 이전
Android, C++, Java, Python 규칙 집합을 전용 저장소로 이전하고 Bazel 출시 버전에서 분리합니다. 이 작업을 통해 Bazel 사용자와 규칙 작성자는 다음을 할 수 있습니다.
- Bazel과 독립적으로 규칙을 업데이트합니다.
- 필요에 따라 규칙을 업데이트하고 맞춤설정합니다.
규칙 집합의 새 위치는 bazelbuild/rules_android, rules_cc, rules_java, rules_python, google/protobuf입니다. rules_proto 는 지원 중단될 예정입니다.
Bazel 8은 이전에 바이너리의 일부였던 규칙 집합을 저장소에서 자동으로 사용하는 임시 이전 플래그를 제공합니다. 이러한 규칙 집합의 모든 사용자는 결국 저장소에 종속되고 Bazel의 일부가 아니었던 다른 규칙 집합과 유사하게 로드할 것으로 예상됩니다.
Bazel 8은 기존 확장 규칙 및 하위 규칙 API를 개선하고 실험용이 아닌 것으로 표시합니다.
Starlark 개선사항
- 기호 매크로는
BUILD사용자, 매크로 작성자, 도구에 더 친숙한 새로운 매크로 작성 방법입니다. Bazel이 제한된 통찰력만 제공하는 기존 매크로와 비교할 때 기호 매크로는 사용자가 일반적인 문제를 방지하고 권장사항을 적용하는 데 도움이 됩니다. - 패키지 최종화는 맞춤 패키지 유효성 검사 로직에 일급 지원을 추가하기 위해 제안된 기능입니다. 이는
native.existing_rules()를 지원 중단하는 데 도움이 됩니다.
구성 가능성
- 출력 경로 매핑이 계속 안정화되고 있습니다. 전환을 사용하는 규칙 설계자를 위한 더 나은 원격 캐시 성능과 빌드 속도를 제공합니다.
- 지정된
--platforms에 적합한 빌드 플래그를 자동으로 설정합니다. - bazelrc를 설정하지 않고도 프로젝트에서 지원되는 플래그 조합을 정의하고 기본 플래그로 빌드 대상을 자동으로 빌드합니다.
- 빌드 플래그가 변경될 때마다 빌드 분석을 다시 실행하지 않습니다.
프로젝트 Skyfocus - 보관된 데이터 구조 최소화
Bazel은 빠른 증분 빌드를 위해 RAM에 많은 상태를 보관합니다. 그러나 개발자는 소스 파일의 작은 하위 집합을 자주 변경합니다 (예: 외부 종속 항목 중 하나는 거의 변경하지 않음). Skyfocus를 사용하면 Bazel은 동일한 빠른 증분 빌드 환경을 제공하면서 불필요한 증분 상태를 삭제하고 Bazel의 메모리 사용 공간을 줄이는 실험적인 방법을 제공합니다.
초기 범위는 보관된 힙 측정항목만 개선하는 것을 목표로 합니다. 최대 힙 감소는 가능하지만 초기 범위에는 포함되지 않습니다.
기타
- 모바일 설치 v3: Android 애플리케이션을 점진적으로 배포하는 더 간단하고 더 잘 유지관리되는 접근 방식입니다.
- 저장소 캐시 및 Bazel의
install_base에 대한 가비지 컬렉션입니다. - 샌드박스 오버헤드가 줄었습니다.
Bazel-JetBrains* IntelliJ IDEA 지원
최신 JetBrains 플러그인 출시 버전을 지원하기 위한 증분 IntelliJ 플러그인 업데이트입니다.
이 로드맵은 스냅샷 대상을 제공하며 보장으로 간주해서는 안 됩니다. 우선순위는 개발자 및 고객 의견 또는 새로운 시장 기회에 따라 변경될 수 있습니다.
이 로드맵 업데이트를 비롯한 새로운 기능에 대한 알림을 받으려면 Google 그룹 커뮤니티에 가입하세요.
*Copyright © 2022 JetBrains s.r.o. JetBrains 및 IntelliJ는 JetBrains s.r.o의 등록상표입니다.