Google只是open-sourced它的构建工具Bazel。这个工具和Gradle有什么区别?它能做Gradle做不到的事情,它做得更好的事情是什么,Gradle做得更好的事情是什么?
2ledvvac1#
Bazel和Gradle强调构建体验的不同方面。在某种程度上,他们的优先级是不相容的-- Gradle对灵活性和非强制性的渴望限制了它可以对构建结构施加的限制,而Bazel对可靠性和性能的渴望必然强制了不可协商的限制。Gradle与Bazel一样重视性能(增量构建、并行配置和执行、Gradle守护进程)、正确性(基于内容的“最新”检查)和可再现性(对声明性语法、依赖项版本控制、显式声明的依赖项的丰富支持)。Bazel尊重灵活的项目布局需求。Gradle希望促进良好实践,而Bazel希望要求良好实践。Gradle的目标是在Ant体验(自由定义自己的项目结构,但结果不一致)和Maven体验(强制执行最佳实践,不为不同的项目需求留余地)之间找到一个中间地带。Bazel相信,灵活的项目支持是可能的,而不会牺牲强大的工作流所带来的强大保证。这两种哲学都不是更“正确”的--哪种工具最适合一个项目取决于该特定项目的价值观。
Gradle是一个高度灵活的系统,用户可以轻松构建完整、可靠的构建流程,而对如何组织项目的限制最小。它通过提供强大的构建模块(例如自动依赖项跟踪和检索、紧密集成的插件支持)以及通用的图灵完整的脚本接口来实现这一点,该接口可以根据用户的需要合并这些模块。Gradle强调以下功能:
Bazel是从可靠而高效地构建Google内部项目的需求中发展而来的。由于Google的开发环境异常庞大和复杂,Bazel提供了异常强大的构建完整性保证,并且在实现这些构建时性能开销异常低。这为围绕可重复构建构建的强大开发工作流提供了基础,其中“构建”成为一个抽象实体,可以被引用、重复、传递到不同的计算机,并传递到任意程序和服务,从而使每个示例都完全相同。Bazel强调了以下特点:
eqqqjvef2#
由于文章链接往往会消失,这里是the Gradle Team's views on Bazel的摘要(大部分直接从2015年3月发表的文章中删除):它的设计是为了解决谷歌独有的一个问题;一个庞大的单片代码库(数亿个LOC)。Bazel目前提供的并行化优势将与“我们即将推出的新配置和组件模型”相匹配(请记住此处的文章日期)。Bazel没有一个高级的声明性构建语言来让开发者容易使用构建。在Google,这可以通过一个拥有构建工具的专业服务团队来弥补。Bazel并不是为可扩展性而构建的(尽管Bazel开发团队后来已经保证他们正在致力于可扩展性)。速度是围绕着这样一个想法来优化的,即所有的传递依赖关系都存储在一个大的存储库中;所有的库和工具都被签入到这个中央存储库中。2大多数企业都有更多的分布式依赖关系管理需求。Bazel和Gradle均适用于Linux、Windows和macOS。没有插件生态系统。
bqf10yzr3#
Gradle主要用于JVM生态系统(Java、Groovy、Scala、Kotlin...)。如果您的项目属于这一领域,并且您必须提出问题,Gradle或Maven将是更好的选择。要对Gradle构建进行故障排除,您只需与Java和JVM生态系统进行争论。核心Bazel能够检测增量变化(以及分布式构建缓存),并允许您做出React,应用插件/规则来实现增量构建。要设置和维护这一点,需要一些CPP知识,Java和Python(Skylark)和系统管理员的知识。再次如果你要问这个问题,我认为Gradle或Maven将是一个更便宜的投资。使用Bazel,您可以构建任何语言,以任何方式定义,更多的功能,但要付出代价。
3条答案
按热度按时间2ledvvac1#
Bazel和Gradle强调构建体验的不同方面。在某种程度上,他们的优先级是不相容的-- Gradle对灵活性和非强制性的渴望限制了它可以对构建结构施加的限制,而Bazel对可靠性和性能的渴望必然强制了不可协商的限制。
Gradle与Bazel一样重视性能(增量构建、并行配置和执行、Gradle守护进程)、正确性(基于内容的“最新”检查)和可再现性(对声明性语法、依赖项版本控制、显式声明的依赖项的丰富支持)。Bazel尊重灵活的项目布局需求。
Gradle希望促进良好实践,而Bazel希望要求良好实践。Gradle的目标是在Ant体验(自由定义自己的项目结构,但结果不一致)和Maven体验(强制执行最佳实践,不为不同的项目需求留余地)之间找到一个中间地带。Bazel相信,灵活的项目支持是可能的,而不会牺牲强大的工作流所带来的强大保证。
这两种哲学都不是更“正确”的--哪种工具最适合一个项目取决于该特定项目的价值观。
Gradle概览
Gradle是一个高度灵活的系统,用户可以轻松构建完整、可靠的构建流程,而对如何组织项目的限制最小。它通过提供强大的构建模块(例如自动依赖项跟踪和检索、紧密集成的插件支持)以及通用的图灵完整的脚本接口来实现这一点,该接口可以根据用户的需要合并这些模块。
Gradle强调以下功能:
Bazel概览
Bazel是从可靠而高效地构建Google内部项目的需求中发展而来的。由于Google的开发环境异常庞大和复杂,Bazel提供了异常强大的构建完整性保证,并且在实现这些构建时性能开销异常低。
这为围绕可重复构建构建的强大开发工作流提供了基础,其中“构建”成为一个抽象实体,可以被引用、重复、传递到不同的计算机,并传递到任意程序和服务,从而使每个示例都完全相同。
Bazel强调了以下特点:
eqqqjvef2#
由于文章链接往往会消失,这里是the Gradle Team's views on Bazel的摘要(大部分直接从2015年3月发表的文章中删除):
它的设计是为了解决谷歌独有的一个问题;一个庞大的单片代码库(数亿个LOC)。
Bazel目前提供的并行化优势将与“我们即将推出的新配置和组件模型”相匹配(请记住此处的文章日期)。
Bazel没有一个高级的声明性构建语言来让开发者容易使用构建。在Google,这可以通过一个拥有构建工具的专业服务团队来弥补。
Bazel并不是为可扩展性而构建的(尽管Bazel开发团队后来已经保证他们正在致力于可扩展性)。
速度是围绕着这样一个想法来优化的,即所有的传递依赖关系都存储在一个大的存储库中;所有的库和工具都被签入到这个中央存储库中。2大多数企业都有更多的分布式依赖关系管理需求。
Bazel和Gradle均适用于Linux、Windows和macOS。
没有插件生态系统。
bqf10yzr3#
Gradle主要用于JVM生态系统(Java、Groovy、Scala、Kotlin...)。如果您的项目属于这一领域,并且您必须提出问题,Gradle或Maven将是更好的选择。要对Gradle构建进行故障排除,您只需与Java和JVM生态系统进行争论。
核心Bazel能够检测增量变化(以及分布式构建缓存),并允许您做出React,应用插件/规则来实现增量构建。要设置和维护这一点,需要一些CPP知识,Java和Python(Skylark)和系统管理员的知识。再次如果你要问这个问题,我认为Gradle或Maven将是一个更便宜的投资。使用Bazel,您可以构建任何语言,以任何方式定义,更多的功能,但要付出代价。