Основные возможности
- Поддержка разных языков программирования: Bazel поддерживает Java, Objective-C и C++, а также может быть расширен для поддержки других языков.
- Высокоуровневый язык конфигурирования сборки: проекты конфигурируются с помощью языка BUILD-файлов, в компактном текстовом формате, который описывает проекты как наборы небольших, взаимосвязанных библиотек, исполняемых файлов и тестов. В отличии от Bazel, Makefile, например, содержат описания конкретных файлов и параметров запуска компилятора.
- Поддержка множества платформ: один и тот же инструмент используется для сборки ПО для различных архитектур и даже разных платформ. Google использует Bazel для сборки как серверного ПО, так и клиентских приложений на мобильных телефонах.
- Воспроизводимость результатов: в BUILD файлах каждая библиотека, тест или исполняемый файл прямо указывают свои непосредственные зависимости. Bazel использует эту информацию, чтобы определять, как пересобирать двоичные файлы и параллельно выполнять тесты. Это означает, что все сборки инкрементальны и приводят к одинаковым результатам.
- Масштабируемость: Bazel легко справляется с большими сборками. В Google достаточно часто серверные приложения занимают 100k строк кода и сборки ветки без отличий от кода основного репозитория могут занимать около 200 мс.
- Make, Ninja? Эти приложения дают доступ к очень низкоуровневому контролю над выполнением сборки, но пользователь обязан следить за малейшими нюансами и их обеспечивать их правильность. Пользователи взаимодействуют с Bazel на высоком уровне. Примерами правил являются «Javа-тест», «исполняемый файл C++», также существует понятие «целевая платформа». Эти правила показали себя очень удобными на практике и легкими в использовании.
- Ant и Maven? Ant и Maven в основном используются для Java, в то время как Bazel поддерживает множество языков. Bazel поощряет разделение кодовой базы на мелкие и легко используемые модули и может пересобирать только те модули, которые нуждаются в сборке. Это значительно увеличивает скорость разработки.
- Gradle? Конфигурационные файлы Bazel значительно более структурированы, позволяя Bazel делать исключительно то, что описывается в тех правилах, которые он поддерживает. Это улучшает параллелизм и повторяемость результатов сборки.
- Buck, Pants? Обе эти системы сборки были созданы бывшими сотрудниками Google, работающими в Twitter и Facebook. Они были основаны на Bazel, но их функциональность так и не смогла сравниться с оригиналом, потому они никогда не стали возможными альтернативами для самой Google.
Внутри Google используются большие кластеры сборки, они не входят в открытую версию Bazel, которая работает на локальной машине пользователя. В то же время существует поддержка добавления пользовательских удаленных кластеров сборки или кешей двоичных файлов. Такие системы значительно ускоряют сборку двоичных файлов из исходных кодов, которые незначительно отличаются от огромной кодовой базы в основной ветке.
Пример BUILD-файла, который на самом деле является скриптом на Python.
cc_library(
name = "sign-in",
srcs = ["sign_in.cc"],
hdrs = ["sign_in.h"],
deps = ["//external:openssl"],
)
java_binary(
name = "java-tool",
srcs = [
"RunTool.java",
],
)
>>> Подробности