为什么google bazel构建工具流行不起来
作者Jack47
转载请保留作者和原文出处
之前博主写了系列文章Google软件构建工具Bazel原理及使用方法介绍。最近使用了一段时间后,觉得这个东西不是一种通用的构建工具,很难对接到情况复杂的大的工程项目里。今天来讲讲为什么博主觉得google bazel构建工具不会大规模流行起来。本文是参考Gradle--另外一个很出名的构建工具--的人对bazel的看法的这篇文章基础上整理而成的
Google bazel想解决什么问题?
Bazel是Google内部构建系统Blaze的子集,所以Bazel想解决的最主要是Google所面临的独一无二[可能不完全是]的问题“:
这篇文章记录了Google面临的问题:
Google的代码库是非常巨大的(有数百万行代码),好处是公司内部都推行一套统一的开发风格。例如,对每种语言都有写好的风格规范,有一个多语言的构建系统来给所有的项目构建代码,源代码都在一个地方存放,一个统一的持续集成来运行所有的单测。软件工具开发者们可以访问并分析到所有的代码,每个人都使用相同的code reviews工具并使用同一套索引来搜索代码库
所有代码都在一个源代码仓库里,因此Google是世界上少数几个遇到这样大规模问题的公司,所以构建过程中的性能问题是最关键的需求,其他需求都是次要的,尤其是跟Google不相关的需求。可惜的是大部分公司都不是Google,有更广泛的需求。
bazel为什么不适合其他公司
大部分公司都不是Google的这种情况,不会有强大的构建团队来专门做软件构建相关的工具,也不会有Google那么好的开发文化,没有统一的构建工具,因此大项目想对接bazel,会遇到很多困难。
Google 内部软件构建系统已经开发了超过7年了,所以开发适合Google自己的构建工具是他们的初衷。Google构建工具跟其他工具相比,强调的是“更加结构化”,这样能够提高并发度,拥有更好的可重现性[reproducibility]。但这样对源代码的组织方式和头文件的书写规则,库之间依赖关系的书写要求就比较高:
- 要求所有相关的源代码都以Bazel要求的组织形式来发布:
- 要求所有代码的传递依赖都存储在一个代码仓库里
- 所有的库和相关的工具都是提交到这个代码库里。
以上这几点是很难同时达到的,大部分公司管理依赖关系的方式都不尽相同。举个例子,在Linux下开发,很多包是rpm形式发布的,对于这种第三方的包,就很难实现Bazel的要求,不可能要求每个rpm包都提供Bazel的依赖描述文件:BUILD文件,而且在构建过程中,怎么把rpm文件组织到工程的源代码里面,也是一个头疼的问题。虽然有办法也可以做到,例如使用程序自动下载,解压rpm文件,然后生成BUILD文件,但是这当中会遇到很多一些问题。所以google的bazel这一套构建工具,需要公司里上下游的开发团队都用起来,才能发挥应有的效益。
另外一个原因是Bazel目前不支持Windows操作系统。
为什么google bazel构建工具流行不起来的更多相关文章
- Google软件构建工具Bazel原理及使用方法介绍
近期,Google开源了强大的自动化构建工具Bazel. 正好博主近期在使用china版的Bazel--腾讯自主开发的Blade,所以准备跟大家分享一下Google Bazel这个分布式构建系统的原理 ...
- Google软件构建工具Bazel FAQ
Google软件构建工具Bazel FAQ 本文是我的翻译,原文在这里.欢迎转载,转载请注名本文作者和原始链接 注:如果想了解Bazel的原理,可以看看我之前翻译的Google Blaze原理及使用方 ...
- Google软件构建工具Bazel
转载Google软件构建工具Bazel FAQ 本文是我的翻译,原文在这里.欢迎转载,转载请注名本文作者和原始链接注:如果想了解Bazel的原理,可以看看我之前翻译的Google Blaze原理及使用 ...
- Bazel构建工具的安装
官方Doc:https://docs.bazel.build/versions/master/install-ubuntu.html 使用Bazel定制的APT存储库 (recommended) 1. ...
- Redhat环境下编译安装Google Bazel
Redhat环境下编译安装bazel 作者:Jack47 目前Google Bazel没有提供各个操作系统下的二进制安装包,只提供源代码,需要我们自己编译安装,详情可以见我翻译的中文版Google B ...
- 流行得前端构建工具比较,以及gulp配置
前端现在三足鼎立的构建工具(不算比较老的ant,yeoman),非fis,grunt,gulp莫属了. fis用起来最简单,我打算自己得项目中使用一下fis. 先说一下gulp安装吧. 第一步:安装n ...
- 构建工具Bazel入门
Bazel入门 原文:http://bazel.io/docs/getting-started.html 译者:chai2010 安装 安装过程请参考: http://bazel.io/docs/ ...
- TensorFlow的Bazel构建文件结构
目录 说明 分析 全局设定文件:$TF_ROOT/WORKSPACE 外部依赖项入口:tensorflow/workspace.bzl 看看有多少package? 本来是想理解一下TF源码编译过程的, ...
- 前端项目构建工具---Grunt
什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...
随机推荐
- 复利计算APP版-----娱乐一下
先不说那么多,下载地址来一个:http://pan.baidu.com/s/1eSz2GBg 目前版本号为:0.3 lastest 软件上线了!三平台首发! 下载地址: http://shouji.b ...
- jq插件制作(力推)
http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html http://www.frontopen.com/1710.html
- Terminology: Sandbox
In Comupter Secuity: from https://en.wikipedia.org/wiki/Sandbox_(computer_security) In computer secu ...
- 【原】iOS学习之Masonry第三方约束
1.Masonry概述 目前最流行的Autolayout第三方框架 用优雅的代码方式编写Autolayout 省去了苹果官方恶心的Autolayout代码 大大提高了开发效率 框架地址:https:/ ...
- 在CentOS下利用Python+selenium获取腾讯首页的今日话题。
1.安装依赖包 yum install wget firefox gcc zlib zlib-devel Xvfb 2.安装setuptools 官网地址:https://pypi.python.or ...
- make工作时的执行步骤
GNU的make工作时的执行步骤 (1)读入所有的Makefile (2)读入被include的其它Makefile (3)初始化文件中的变量 (4)推导隐晦规则,并分析所有的规则 (5)为所有的目标 ...
- Codeforces Round #258 (Div. 2)
A - Game With Sticks 题目的意思: n个水平条,m个竖直条,组成网格,每次删除交点所在的行和列,两个人轮流删除,直到最后没有交点为止,最后不能再删除的人将输掉 解题思路: 每次删除 ...
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- JavaScript-String基础知识
1.字符串可以0个或多个字符串放在一起: " ' ' ".'""' . "\"\"" 2.写法 ...
- Salesforce入门学习介绍
大家好,本人作为重庆德勤2016年的实习生,进公司实习后有幸接触到了Salesforce,通过一个多月的自学以及培训,准备和大家分享一下我的Salesforce学习之路. 一.什么是Salesforc ...