Доступний випуск Bazel 2.0, який використовується Google для збирання більшості внутрішніх проектів
Доступний випуск Bazel 2.0, який використовується Google для збирання більшості внутрішніх проектів
Доступний випуск відкритого складального інструментарію Bazel 2.0, що розвивається інженерами з Google і використовується для складання більшості внутрішніх проектів даної компанії. Bazel забезпечує складання проекту, запускаючи необхідні компілятори та тести. Підтримується складання та тестування коду на Java, C++, Objective-C, Python, Rust, Go та багатьох інших мовах, а також складання мобільних додатків для Android та iOS. Код проекту поширюється під ліцензією Apache 2.0.
Значна зміна версії пов'язана з додаванням змін, що порушують зворотну сумісність. Починаючи з Bazel 2.0 включені за замовчуванням режими "--incompatible_remap_main_repo" (посилання по імені та через @ тепер посилаються на один репозиторій), "--incompatible_disallow_dict_lookup"_(застосування нехешованих ключів), "--incompatible_remove_native_maven_jar" та "--incompatible_prohibit_aapt1". Серед інших змін:
- У команді aquery з'явилася експериментальна підтримка нової редауції формату виведення "proto" (--output=proto), яка поки що відключена за умовчанням (--incompatible_proto_output_v2) і забезпечує більш компактне представлення даних;
- Доданий прапор "--incompatible_remove_enabled_toolchain_types", який дозволяє видалити поле PlatformConfiguration.enabled_toolchain_types;
- Додано захист від завантаження пакетів, при завантаженні яких під час розкриття шляхів використовуються циклічні символічні посилання;
- Реалізовано можливість використання прапора "--disk_cache" із зовнішніми кешами gRPC;
- У пакет для Debian та бінарний інсталятор включено покращений прошарок, що обробляє файли ~/.bazelversion та змінну оточення $USE_BAZEL_VERSION;
- У рамках підготовки до перекладу файлів з маніфестом runfiles до категорії застарілих можливостей доданий прапор "--experimental_skip_runfiles_manifests".
Серед відмінних рис Bazel виділяються висока швидкість, надійність і повторюваність процесу складання. Для досягнення високої швидкості складання Bazel активно застосовуються техніки кешування і розпаралелювання процесу складання. У BUILD-файлах обов'язково повністю визначені всі залежності, на основі яких приймаються рішення щодо перескладання компонентів після внесення змін (перезбираються тільки файли, що змінилися) і розпаралелювання процесу складання. Інструментарій також гарантує повторюваність збирання, тобто. результат складання проекту на машині розробника повністю співпадатиме зі складанням на сторонніх системах, таких як сервери безперервної інтеграції.
На відміну від Make і Ninja в Bazel застосовується більш високорівневий підхід до побудови правил зборки, при якому замість визначення прив'язки команд до файлів, що збираються, проводиться застосування більш абстрактних готових блоків, таких як "складання виконуваного файлу мовою С++", "складання бібліотеки на C++" або "запуск тесту для C++", а також визначення цільових та складальних платформ. У текстовому файлі BUILD компоненти проекту описуються як зв'язування бібліотек, виконуваних файлів і тестів, без деталізації лише на рівні окремих файлів і команд виклику компілятора. Додаткова функціональність здійснюється через механізм підключення розширень.
Підтримується використання єдиних складальних файлів для різних платформ та архітектур, наприклад, один файл збірки без змін може застосовуватися як для серверної системи, так і для мобільного пристрою. Складальна система спочатку спроектована для оптимального складання проектів Google, у тому числі складання дуже великих проектів і проектів, що містять код кількома мовами програмування, що вимагають розширеного тестування та збираються для декількох платформ.