Bazel与Gradle工具差异

之前介绍Bazel文章中有同学闻到Bazel与Gradle工具的差异。这篇文章我们解答这个问题。

来自Bazel员工的说法

Bazel和Gradle强调构建体验的不同方面。在某种程度上,它们的侧重点是互斥的——Gradle对灵活性和非突出性的要求对它的构建结构进行了限制,而Bazel对可靠性和性能的要求产生了强制不可协商的限制。

Gradle重视的原则和Bazel是一样的,也就是说,Gradle团队非常重视性能(增量构建、并行配置和执行、Gradle守护进程)、正确性(基于内容的“最新”检查)和可再生性(对声明式语法的丰富支持、依赖版本控制、显式声明的依赖关系)。Bazel尊重灵活的项目布局的需要。

区别在于,Gradle想要促进良好的实践,而Bazel想要要求它。Gradle的目标是在Ant经验(用不连贯的结果自由定义你自己的项目结构)和Maven经验(强制的最佳实践,不为不同的项目需求留有余地)之间找到一个中间位置。Bazel相信,灵活的项目支持是可能的,而不牺牲使其强大的工作流程保证,。

这两种哲学都不是绝对“正确”的——任何最适合项目的工具都取决于特定项目的价值。

Gradle概述

Gradle是一个高度灵活的系统,用户可以很容易地构建完整、可靠的构建流程,并且对如何组织项目的约束最小。它通过提供强大的构建块(例如自动依赖跟踪和检索,紧密集成的插件支持)和通用的、图灵完备的、脚本化的界面来实现这一点,用户可以按照自己的意愿组合这些块。

Gradle强调了以下特性:

  • 易于从其他系统迁移。Gradle可以轻松地容纳任何项目组织,轻松地实现任意的工作流结构。它可以本地理解Ant任务,并本地集成Maven和Ivy存储库。
  • 高度可扩展的脚本模型。用户通过编写Groovy脚本实现所有构建逻辑。“构建”仅仅是通用任务的依赖顺序执行,这些任务本质上是开放式的、可覆盖的、可扩展的方法定义。
  • 丰富的依赖关系管理。版本化依赖项可以从外部代码库、本地文件系统和其他Gradle项目中声明并自动分段。构建输出同样可以自动发布到存储库和其他位置。
  • 紧密集成的插件系统。插件是简单的任务包,组织起来以促进所需的工作流程。许多Gradle的“核心”特性实际上是通过插件实现的(例如Java, Android)。插件(由它们自己决定)与构建脚本逻辑紧密交互。插件可以深入访问Gradle的核心数据结构。

Bazel的概述

Bazel的发展源于可靠而高效地构建内部谷歌项目的需求。因为谷歌的开发环境非常大,非常复杂,所以Bazel对构建的完整性提供了非常强的保证,并且在实现构建过程中提供了非常低的性能开销。

这为围绕可复制构建构建的强大开发工作流提供了基础,其中“构建”成为一个抽象实体,可以引用、重复、传递给不同的机器,并传递给任意的程序和服务,这样就可以知道每个实例都是完全相同的。

Bazel强调了以下特点:

  • 正确性:Bazel构建被设计成总是产生正确的输出,就是这样。如果两个用户在不同的机器上使用相同的Bazel标志在相同的提交时调用相同的构建,他们将看到相同的结果。增量构建和干净构建一样可靠,因此后者基本上是不必要的。
  • 性能:构建被设计成在给定可用资

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无线领夹麦克风品牌排名,揭秘哪种领夹麦性价比高!

在直播电商和Vlog的热潮推动下,自媒体内容创作迎来了前所未有的繁荣。麦克风行业也因应这一趋势,迎来了快速的增长期。特别是无线领夹麦克风,以其便携性和高效的录音能力,迅速成为视频制作者的新宠。它不仅在直播带货和短视频制作…

allure安装教程

1、下载 allure的官网下载地址: https://github.com/allure-framework/allure2/releases 注意:官网时常访问失败,可以访问以下网址: https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 选择一个版本&…

Qt实现开机自启两种方法包含注意事项以及常见问题解决

Qt开机自启教程 Qt是一个跨平台的C++框架,用于开发图形用户界面应用程序,同时也支持其他类型的应用程序开发,如命令行工具、服务器、嵌入式设备应用程序等。用户在虚拟机开发后使用交叉编译器放到设备中设置开机自启,以下是两种常用的方法。 通过Systemd 设置开机自启 1…

C++ CMake 预定义宏与变量

宏/变量 说明 CMAKE_SOURCE_DIR 顶层 CMakeLists.txt 所在的目录 CMAKE_BINARY_DIR 构建输出目录的顶层路径 CMAKE_CURRENT_SOURCE_DIR 当前处理的 CMakeLists.txt 所在的路径 CMAKE_CURRENT_BINARY_DIR 当前处理的 CMakeLists.txt 输出的构建目录 CMAKE_CURRENT_LIS…

Uniapp的使用

为什么要使用uniapp uniapp 可以进行多端开发,uniapp 在设计的时候就拥有许多兼容性代码,可以兼容很多的平台 如 支付宝小程序 html页面 微信小程序等,注重开发效率而不是运行效率时 ,就可以考虑一下 uniapp 当然也可以去…

深入浅出:MongoDB中的背景创建索引

深入浅出:MongoDB中的背景创建索引 想象一下,你正忙于将成千上万的数据塞入你的MongoDB数据库中,你的用户期待着实时的响应速度。此时,你突然想到:“嘿,我应该给这些查询加个索引!” 没错&…

python实现链接数据库查询方法步骤

前言 在python项目开发中,我们经常使用多种数据库存储数据,常用的有: MySQL:mysql-connector-python, PyMySQL PostgreSQL:psycopg2 SQLite:sqlite3(标准库) 下面是一个通用的步骤示例&#xff…

ABAP ALV报表性能优化 经验总结

优化ALV报表,最主要就是优化取数逻辑和数据库查询。因为几乎在所有的程序中都会用到数据库查询,所以这篇文章的内容也不仅局限于SAP、ABAP程序,虽然ABAP有其特殊之处。 优化的时候我遵从以下几个原则: 1.把数据库连接视为一种极其…

CodeBlocks 导航栏/输出栏/菜单栏消失

参考地址:CodeBlocks 导航栏/输出栏/菜单栏消失_codeblocks工具栏没了-CSDN博客

Vivo手机怎么录屏?分享2种录屏方法

“新换的Vivo手机还挺好用的,但是今天看到一个视频想录下来保存,但找不到录屏功能啊,想问问大家Vivo手机的录屏功能怎么打开啊?还有Vivo手机能不能录制出高质量的视频呢?” 随着智能手机的普及,录屏功能已…

Redis 高并发缓存架构实战与性能优化

前置知识 1、缓存击穿、缓存失效的基本概念 2、什么样的 数据 需要加分布式锁 3、课上代码 05-一线大厂Redis高并发缓存架构实战与性能优化 对于 公司 中 简单的增删改查 做 高性能处理 , 采用递进的方式一步步优化。 普通Redis用法: 新增、修改、删…

Bazel构建工具介绍

Android开发我们主要用到的编译器是Java的Java编译器以及C/C++的gcc/clang编译器。对应Java层构建工具最初是Ant,后面Maven以及gradle;C/C++构建工具主要是make/cmake,做过系统开发或者chromeium,可能还用过ninjia、gclient、mm等。最近在编译Android平台的tensorflow lite…

Gobject tutorial 十一

参考:GObject – 2.0 Generic Value Container GValue结构体是一个变量容器,它包含一个类型成员和类型对应的值。其定义如下: /*** GValue:* * An opaque structure used to hold different types of values.** The data within the structure has pr…

ChatTTS源码部署

感谢阅读 默认已完成的操作准备工作下载源码安装依赖下载补丁(报错在运行) 界面展示(discord上有各种补丁,我的加了UI补丁和音色增强)提示词常用(这个每个音基本都能生效)语调类语速类情感类 默认已完成的操作 python版本>3.9 cuda版本的…

supersocket的app层源码解析

基础结构 #mermaid-svg-Q1MUtx0YWtvpRVNw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Q1MUtx0YWtvpRVNw .error-icon{fill:#552222;}#mermaid-svg-Q1MUtx0YWtvpRVNw .error-text{fill:#552222;stroke:#552222;}#…

《化工管理》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《化工管理》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《化工管理》级别? 答:国家级。主办单位:中国石油和化学工业联合会 主管单位&…

国产操作系统上配置ssh互信 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上配置ssh互信 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产桌面操作系统上配置SSH互信的文章。SSH(Secure Shell)是一种安全协议,用于在不安全的网络上安全地…

uniapp app分享页面到微信的功能方法

最近开发uniapp app项目时,有分享页面的功能需求,因此,给大家分享一下,在uniapp环境里,是如何分享页面到微信H5页面的。 如上图所示:app主体代码就是这样了,查看相应配置就可以,同时…

Swoole v6 能否让 PHP 再次伟大?

大家好,我是码农先森。 现状 传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求。而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信。对数据库资源的操作…

图的最短路径算法:原理与实现

图的最短路径算法:原理与实现 在图论中,最短路径算法用于找到图中从一个顶点到另一个顶点的最短路径。常见的最短路径算法包括Dijkstra算法、Bellman-Ford算法和Floyd-Warshall算法。以下是每个算法的详细讲解及其Java实现。 1. Dijkstra算法 原理&am…