Відповіді:
Відмова: Я працюю над Базелем, і я не дуже знайомий з Gradle. Однак один із моїх колег написав порівняння двох систем, які я перефразую тут:
Базель і Градле підкреслюють різні аспекти досвіду будівництва. До певної міри їхні пріоритети несумісні - прагнення Градле до гнучкості та ненав'язливості обмежує обмеження, які він може накласти на структуру побудови, тоді як бажання Базеля до надійності та продуктивності обов'язково застосовує обмеження, що не підлягають обговоренню.
Gradle дійсно цінує ті самі принципи, що і Bazel, тобто команда Gradle приділяє велику увагу продуктивності (покрокові побудови, паралелізована конфігурація та виконання, демон Gradle), правильність (перевірка на основі контенту "актуальної" перевірки) та відтворюваність (багата підтримка декларативного синтаксису, версія про залежність, явно оголошені залежності). І Базель поважає необхідність гнучких макетів проектів.
Нюанс полягає в тому, що Градле хоче просувати хорошу практику, тоді як Базель хоче цього вимагати. Градле прагне до середнього між досвідом Мураш (свобода визначати свою власну структуру проекту з неузгодженими результатами) та досвідом Мейвена (застосовувати кращі практики, не маючи місця для різних потреб проекту). Базель вважає, що гнучка підтримка проектів можлива без шкоди для надійних гарантій, що забезпечують його потужний робочий процес.
Жодна філософія не є більш «правильною» - той інструмент, який найкраще підходить для проекту, залежить від цінностей конкретного проекту.
Gradle - це дуже гнучка система, яка дозволяє користувачам легко створювати повноцінні, надійні потоки збірки з мінімальними обмеженнями в організації організації своїх проектів. Це робиться завдяки постачанню потужних будівельних блоків (наприклад, автоматичного відстеження залежностей та пошуку, тісно інтегрована підтримка плагінів) із загальним інтерфейсом сценаріїв, повним Тьюрінгом, який може комбінувати ці блоки, як того бажають користувачі.
Градле підкреслює наступні особливості:
Базель розвинулася з необхідності надійного та ефективного створення внутрішніх проектів Google. Оскільки середовище розробки Google незвичайно велике і складне, Bazel надає незвичайно міцні гарантії цілісності своїх конструкцій та незвично низьких витрат на їх виконання.
Це забезпечує основу для потужних робочих процесів розвитку, побудованих навколо відтворюваних збірок, де "збірка" стає абстрактною сутністю, яку можна посилати, повторювати, передавати на різні машини та передавати до довільних програм та служб таким, що, як відомо, кожен екземпляр точно так само.
Базель наголошує на наступних особливостях:
Оскільки посилання на статті мають тенденцію до вмирання, ось короткий виклад поглядів Команди Gradle на Базель (більшість з них безпосередньо виведені зі статті, опублікованої у березні 2015 року):
Він був розроблений для вирішення унікальної для Google проблеми; масивна монолітна кодова база (сотні мільйонів LOC).
Перевага паралелізації, яке Базель надає зараз, буде відповідати "нашій новій новій конфігурації та моделі компонентів" (майте на увазі дату статті тут).
Bazel не має декларативної мови складання, що робить цю збірку зручною для розробників. В Google це можна компенсувати спеціалізованою службою обслуговування, яка володіє інструментом збирання.
Bazel не побудований для розширення (хоча команда розробників Bazel з тих пір протидіяла цьому запевненням, що вони працюють над розширенням).
Швидкість оптимізована навколо ідеї, що всі перехідні залежності зберігаються в одному великому репо; всі бібліотеки та інструменти заносяться до цього центрального сховища. Більшість підприємств мають більш розповсюджені вимоги до управління залежностями.
Bazel - це * nix, він не працює в Windows. Це виключає велику кількість потенційних підприємств.
Відсутня екосистема плагінів.
Gradle здебільшого використовується в екосистемі JVM (Java, Ggroovy, Scala, Kotlin ...). Якщо ваш проект знаходиться в цій області, і вам доведеться задати питання, кращим вибором буде Gradle або Maven. Щоб усунути проблеми з побудовою Gradle, ви зможете працювати лише з Java та JVM-екосистемою.
Базель в основі має можливість виявляти поступові зміни (а також розподілений кеш збірки) і дозволяє реагувати, застосовувати плагіни / правила для досягнення нарощення нарощування. Для налаштування та підтримки цього знадобилося трохи знань про CPP, Java та Python (Skylark) та знання системного адміністратора. Знову, якщо вам доведеться задати питання, я думаю, що Gradle або Maven були б дешевшими інвестиціями. За допомогою Bazel ви можете створювати будь-які мови, залежно від того, яким чином ви визначите, більше енергії, але затрату.