Bazel 是快速、正確且可擴充的建構工具,具有整合式測試功能,支援多種語言、存放區和平台,是業界領先的生態系統。
Bazel 速度很快
Bazel 確切知道每個建構指令需要哪些輸入檔案,因此只有在每次建構之間輸入檔案集有所變更時,才會重新執行,避免不必要的作業。這個工具會在同一部電腦或遠端建構節點中,盡可能以平行方式執行建構指令。如果建構結構允許,可以同時執行數千個建構或測試指令。
這項功能支援多個快取層,包括記憶體、磁碟和遠端建構伺服器 (如有)。Google 的快取命中率通常超過 99%。
Bazel 正確
Bazel 可確保二進位檔只會從您自己的原始碼建構。Bazel 動作會在個別沙箱中執行,且 Bazel 會追蹤建構作業的每個輸入檔案,只會在需要時重新執行建構指令。這樣一來,二進位檔就會保持在最新狀態,確保相同的原始碼一律會產生相同的二進位檔 (以位元為單位)。
再也不用無止盡地叫用 make clean
,也不用追查其實已在從未建構的原始碼中解決的虛幻錯誤。
Bazel 可擴充
編寫自己的規則和巨集,針對各種專案的特定需求自訂 Bazel,充分發揮 Bazel 的強大功能。
Bazel 規則是以 Starlark 編寫,這是我們內部使用的程式設計語言,屬於 Python 的子集。Starlark 可讓大多數開發人員輕鬆編寫規則,同時建立可在整個生態系統中使用的規則。
整合測試
Bazel 的整合式測試執行器只會知道並執行需要重新執行的測試,並使用遠端執行 (如有) 平行執行這些測試。使用遠端執行功能快速執行數千次測試,及早偵測到不穩定測試。
Bazel 提供工具,可將測試結果上傳至中央位置,方便有效率地傳達測試結果,無論是在 CI 或由個別開發人員進行測試。
支援多個語言
Bazel 支援許多常見的程式設計語言,包括 C++、Java、Kotlin、Python、Go 和 Rust。您可以在同一個 Bazel 呼叫中建構多個二進位檔 (例如後端、網頁 UI 和行動應用程式),而不必受限於單一語言的慣用建構工具。
支援多個存放區
Bazel 可以從多個位置收集原始碼:您不需要提供依附元件 (但可以!),而是將 Bazel 指向原始碼或預先建構的構件 (例如 Git 存放區或 Maven Central) 所在位置,其餘工作則由 Bazel 負責。
支援多平台
Bazel 可同時為多個平台建構專案,包括 Linux、macOS、Windows 和 Android。此外,它還提供強大的交叉編譯功能,可在一個平台上執行建構作業,同時為另一個平台建構程式碼。
廣泛的生態系統
業界領導者都愛用 Bazel,因此建立了一個龐大的開發人員社群,這些開發人員使用 Bazel 並為其貢獻心力。尋找工具、服務和說明文件,包括 Bazel 可使用的諮詢和 SaaS 產品。您可以在開放原始碼軟體存放區中,探索程式設計語言支援等擴充功能。