Câu trả lời:
Tuyên bố miễn trừ trách nhiệm: Tôi làm việc tại Bazel và tôi không quen thuộc lắm với Gradle. Tuy nhiên, một trong những đồng nghiệp của tôi đã viết một so sánh về hai hệ thống, mà tôi sẽ diễn giải ở đây:
Bazel và Gradle nhấn mạnh các khía cạnh khác nhau của kinh nghiệm xây dựng. Ở một mức độ nào đó, các ưu tiên của chúng không tương thích - Mong muốn linh hoạt và không gây khó chịu của Gradle hạn chế các hạn chế mà nó có thể đặt ra đối với cấu trúc xây dựng, trong khi mong muốn về độ tin cậy và hiệu suất của Bazel nhất thiết phải thực thi các hạn chế không thể thương lượng.
Gradle đánh giá cao các nguyên tắc tương tự như Bazel thực hiện, tức là nhóm Gradle rất chú trọng đến hiệu suất (xây dựng gia tăng, cấu hình và thực thi song song, daemon Gradle), tính chính xác (kiểm tra cập nhật dựa trên nội dung) và khả năng tái tạo (hỗ trợ phong phú cho cú pháp khai báo, phiên bản phụ thuộc, phụ thuộc được khai báo rõ ràng). Và Bazel tôn trọng sự cần thiết cho bố trí dự án linh hoạt.
Sắc thái là Gradle muốn thúc đẩy thực hành tốt trong khi Bazel muốn yêu cầu nó. Gradle nhắm đến một nền tảng trung gian giữa trải nghiệm Ant (tự do xác định cấu trúc dự án của riêng bạn với kết quả không mạch lạc) và trải nghiệm Maven (thực thi tốt nhất không có chỗ cho các nhu cầu dự án khác nhau). Bazel tin rằng có thể hỗ trợ dự án linh hoạt mà không phải hy sinh những đảm bảo mạnh mẽ cho phép quy trình công việc mạnh mẽ của mình.
Không phải triết lý nào cũng đúng hơn, đúng - bất kỳ công cụ nào phù hợp nhất với dự án đều phụ thuộc vào giá trị của dự án cụ thể đó.
Gradle là một hệ thống rất linh hoạt giúp người dùng dễ dàng xây dựng các luồng xây dựng hoàn chỉnh, đáng tin cậy với các ràng buộc tối thiểu về cách họ tổ chức các dự án của họ. Nó thực hiện điều này bằng cách cung cấp các khối xây dựng mạnh mẽ (ví dụ: theo dõi và truy xuất phụ thuộc tự động, hỗ trợ plugin tích hợp chặt chẽ) với giao diện kịch bản chung, Turing-Complete, có thể kết hợp các khối này theo ý muốn của người dùng.
Gradle nhấn mạnh các tính năng sau:
Bazel đã phát triển ra khỏi nhu cầu xây dựng các dự án nội bộ của Google một cách đáng tin cậy và hiệu quả. Do môi trường phát triển của Google rộng lớn và phức tạp một cách bất thường, Bazel cung cấp các đảm bảo mạnh mẽ khác thường về tính toàn vẹn của các bản dựng và hiệu suất thấp bất thường trong việc đạt được chúng.
Điều này cung cấp nền tảng cho các quy trình phát triển mạnh mẽ được xây dựng xung quanh các bản dựng có thể tái tạo, trong đó một bản dựng xây dựng trở thành một thực thể trừu tượng có thể được tham chiếu, lặp lại, chuyển qua các máy khác nhau và được chuyển đến các chương trình và dịch vụ tùy ý sao cho mọi trường hợp đều được biết đến giống hệt nhau.
Bazel nhấn mạnh các tính năng sau:
Vì các liên kết bài viết có xu hướng chết, đây là một bản tóm tắt về quan điểm của Nhóm Gradle về Bazel (hầu hết được lấy trực tiếp từ bài báo, được xuất bản vào tháng 3 năm 2015):
Nó được thiết kế để giải quyết một vấn đề duy nhất cho Google; một codebase nguyên khối khổng lồ (hàng trăm triệu LỘC).
Lợi thế song song mà Bazel hiện cung cấp sẽ được khớp với "mô hình thành phần và cấu hình mới sắp tới của chúng tôi" (ghi nhớ ngày viết bài ở đây).
Bazel không có ngôn ngữ xây dựng khai báo cấp cao giúp việc xây dựng dễ sử dụng cho các nhà phát triển. Tại Google, điều này có thể được bù đắp với một nhóm dịch vụ chuyên biệt sở hữu công cụ xây dựng.
Bazel không được xây dựng để mở rộng (mặc dù nhóm phát triển của Bazel đã chống lại điều này với sự đảm bảo rằng họ đang làm việc trên khả năng mở rộng).
Tốc độ được tối ưu hóa xung quanh ý tưởng rằng tất cả các phụ thuộc bắc cầu được lưu trữ trong một repo lớn; tất cả các thư viện và công cụ được kiểm tra trong kho lưu trữ trung tâm này. Hầu hết các doanh nghiệp có nhiều yêu cầu quản lý phụ thuộc phân phối.
Bazel chỉ * nix, nó không chạy trên Windows. Điều này giúp loại bỏ một số lượng lớn các doanh nghiệp tiềm năng.
Không có hệ sinh thái plugin.
Gradle chủ yếu được sử dụng trong hệ sinh thái JVM (Java, Ggroovy, Scala, Kotlin ...). Nếu dự án của bạn nằm trong lĩnh vực này và bạn phải đặt câu hỏi, Gradle hoặc Maven sẽ là lựa chọn tốt hơn. Để khắc phục sự cố bản dựng Gradle, bạn sẽ chỉ sử dụng hệ sinh thái Java và JVM.
Bazel at heart có khả năng phát hiện các thay đổi gia tăng (cũng như bộ đệm xây dựng phân tán) và cho phép bạn phản ứng, áp dụng các plugin / quy tắc để đạt được các bản dựng tăng dần. Để thiết lập và duy trì điều này cần một chút kiến thức về CPP, Java và Python (Skylark) và kiến thức của Quản trị viên hệ thống. Một lần nữa nếu bạn phải đặt câu hỏi tôi nghĩ Gradle hoặc Maven sẽ là một khoản đầu tư rẻ hơn. Với Bazel, bạn có thể xây dựng bất kỳ ngôn ngữ nào, theo cách bạn xác định, nhiều sức mạnh hơn, nhưng với chi phí.