Хорошо, я перенес проект с закрытым исходным кодом, содержащий ~ 100_000 loc java, на bazel.
Gradle 5.6.3 vs bazel 1.0.1
Я не мог измерить чистую сборку, потому что я не уверен, как отделить шаг загрузки зависимостей от шага компиляции, и я все равно не беспокоюсь об этом сценарии использования. Как я уже сказал, мой интерес связан с производительностью разработчиков, а следовательно, и с инкрементными сборками.
Я использовал следующее в BUILD для Bazel, поэтому я не использовал наиболее детализированный подход, потому что я не думаю, что это действительноремонтопригоден, и это может использовать любой, кроме крупных компаний с большим количеством разработчиков. И в любом случае я вижу тот факт, что мне нужно сделать это вручную, чтобы повысить скорость сборки, как недостаток Bazel.
java_binary(
srcs = glob(["src/main/java/**/*.java"]),
resources = glob(["src/main/resources/**"]),
...
)
Инкрементная сборка с одним или двумя измененными файлами.
gradle - 1s , bazel - 4.227s
Я пробовал это несколько раз, и каждый раз gradle был значительно быстрее. Я не тестировал инкрементную сборку, когда было изменено более одного или двух файлов, возможно, в этом сценарии bazel будет таким же или быстрее, чем gradle.
Нет операционной сборки gradle - 700 мс , bazel - 0,090 мс
Таким образом, скорость работы грейдера, похоже, является победителем для производительности разработчиков. У Bazel есть более безопасные значения по умолчанию (склонность к ошибкам включена по умолчанию) в gradle, вы должны включить его самостоятельно, но ИМХО гибкость gradle перевешивает более безопасные значения по умолчанию bazel.