use*_*171 134 build-process build-tools gradle bazel
谷歌只是开源其构建工具Bazel.这个工具和Gradle有什么区别?Gradle不能做什么,它做得更好,Gradle做得更好?
kri*_*ina 152
免责声明:我在Bazel工作,我对Gradle并不熟悉.然而,我的一位同事写了两个系统的比较,我将在这里解释:
Bazel和Gradle强调构建体验的不同方面.在某种程度上,他们的优先级是不相容的 - Gradle对灵活性和非突兀性的渴望限制了它对构建结构的限制,而Bazel对可靠性和性能的渴望必然会强制实施不可协商的限制.
Gradle确实重视Bazel所做的相同原则,即Gradle团队非常重视性能(增量构建,并行配置和执行,Gradle守护程序),正确性(基于内容的"最新"检查)和可重复性(对声明性语法,依赖性版本控制,显式声明的依赖项的丰富支持).Bazel尊重灵活项目布局的需求.
细微之处在于Gradle想要促进良好的实践,而Bazel想要求它.Gradle的目标是在Ant体验(自由定义您自己的项目结构与不连贯的结果)和Maven体验(强制执行的最佳实践,没有不同的项目需求空间)之间建立中间地带.Bazel认为,灵活的项目支持是可能的,而不会牺牲强大的保证,以实现其强大的工作流程.
这两种哲学都不是更"正确" - 最适合项目的工具取决于特定项目的价值.
Gradle是一个高度灵活的系统,使用户可以轻松构建完整,可靠的构建流程,并且对组织项目的方式的限制最小.它通过提供强大的构建块(例如自动依赖性跟踪和检索,紧密集成的插件支持)和通用的Turing完整脚本接口来实现这一点,该接口可以组合这些块,但用户需要.
Gradle强调以下功能:
Bazel的发展是出于可靠,高效地构建内部Google项目的需要.由于Google的开发环境异常庞大且复杂,因此Bazel为其构建的完整性和实现它们的异常低性能开销提供了异乎寻常的强大保证.
这为围绕可重现构建构建的强大开发工作流提供了基础,其中"构建"成为一个抽象实体,可以被引用,重复,传递到不同的机器,并传递给任意程序和服务,以便每个实例都是已知的完全相同的.
Bazel强调以下功能:
RCr*_*oss 39
由于文章链接趋于消亡,以下是Gradle团队对Bazel的观点的摘要(大多数直接取自2015年3月发布的文章):
它旨在解决Google独有的问题; 一个巨大的单片代码库(数以亿计的LOC).
Bazel目前提供的并行化优势将与"我们即将推出的新配置和组件模型"相匹配(请记住此处的文章日期).
Bazel没有高级声明性构建语言,使构建易于开发人员使用.在Google,可以通过拥有构建工具的专业服务团队来补偿.
Bazel不是为了可扩展性而构建的(尽管Bazel开发团队已经对此进行了反驳,并保证他们正在开发可扩展性).
速度是围绕所有传递依赖存储在一个大型仓库中的想法进行优化的; 所有库和工具都签入此中央存储库.大多数企业都有更多的分布式依赖管理要
Bazel只是*nix,它不能在Windows上运行.这消除了大量潜在的企业.
没有插件生态系统.
Gradle 主要用于 JVM 生态系统(Java、Groovy、Scala、Kotlin ...)。如果你的项目属于这个领域,并且你必须提出这个问题,Gradle 或 Maven 将是更好的选择。要对 Gradle 构建进行故障排除,您只需考虑 Java 和 JVM 生态系统。
Bazel 的核心能够检测增量更改(以及分布式构建缓存)并允许您做出反应,应用插件/规则来实现增量构建。要设置和维护它,需要一些 CPP、Java 和 Python(Skylark) 知识以及系统管理员知识。如果你不得不问这个问题,我认为 Gradle 或 Maven 会是更便宜的投资。使用 Bazel,您可以构建任何语言,无论您以何种方式定义,都可以提供更强大的功能,但需要付出一定的代价。
| 归档时间: |
|
| 查看次数: |
25723 次 |
| 最近记录: |