為什麼 Bazel?

回報問題 查看原始碼 Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel 是快速正確可擴充的建構工具,可在業界領先的生態系統中提供整合式測試,支援多種語言存放區平台

Bazel 速度快

Bazel 會確切知道每個建構指令需要哪些輸入檔案,因此只在輸入檔案集在每次建構之間發生變更時重新執行,避免不必要的作業。它會在同一部電腦或遠端建構節點上,以盡可能的並行方式執行建構指令。如果建構結構允許,則可以同時執行數千個建構或測試指令。

這項功能可在記憶體、磁碟和遠端建構農場 (如有) 中,透過多個快取層支援。Google 的快取命中率通常會超過 99%。

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 產品。在我們的開放原始碼軟體存放區中,探索支援程式設計語言等擴充功能。