作者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]。但这样对源代码的组织方式和头文件的书写规则,库之间依赖关系的书写要求就比较高:

  1. 要求所有相关的源代码都以Bazel要求的组织形式来发布:
  2. 要求所有代码的传递依赖都存储在一个代码仓库里
  3. 所有的库和相关的工具都是提交到这个代码库里。

以上这几点是很难同时达到的,大部分公司管理依赖关系的方式都不尽相同。举个例子,在Linux下开发,很多包是rpm形式发布的,对于这种第三方的包,就很难实现Bazel的要求,不可能要求每个rpm包都提供Bazel的依赖描述文件:BUILD文件,而且在构建过程中,怎么把rpm文件组织到工程的源代码里面,也是一个头疼的问题。虽然有办法也可以做到,例如使用程序自动下载,解压rpm文件,然后生成BUILD文件,但是这当中会遇到很多一些问题。所以google的bazel这一套构建工具,需要公司里上下游的开发团队都用起来,才能发挥应有的效益。

另外一个原因是Bazel目前不支持Windows操作系统。

为什么google bazel构建工具流行不起来的更多相关文章

  1. Google软件构建工具Bazel原理及使用方法介绍

    近期,Google开源了强大的自动化构建工具Bazel. 正好博主近期在使用china版的Bazel--腾讯自主开发的Blade,所以准备跟大家分享一下Google Bazel这个分布式构建系统的原理 ...

  2. Google软件构建工具Bazel FAQ

    Google软件构建工具Bazel FAQ 本文是我的翻译,原文在这里.欢迎转载,转载请注名本文作者和原始链接 注:如果想了解Bazel的原理,可以看看我之前翻译的Google Blaze原理及使用方 ...

  3. Google软件构建工具Bazel

    转载Google软件构建工具Bazel FAQ 本文是我的翻译,原文在这里.欢迎转载,转载请注名本文作者和原始链接注:如果想了解Bazel的原理,可以看看我之前翻译的Google Blaze原理及使用 ...

  4. Bazel构建工具的安装

    官方Doc:https://docs.bazel.build/versions/master/install-ubuntu.html 使用Bazel定制的APT存储库 (recommended) 1. ...

  5. Redhat环境下编译安装Google Bazel

    Redhat环境下编译安装bazel 作者:Jack47 目前Google Bazel没有提供各个操作系统下的二进制安装包,只提供源代码,需要我们自己编译安装,详情可以见我翻译的中文版Google B ...

  6. 流行得前端构建工具比较,以及gulp配置

    前端现在三足鼎立的构建工具(不算比较老的ant,yeoman),非fis,grunt,gulp莫属了. fis用起来最简单,我打算自己得项目中使用一下fis. 先说一下gulp安装吧. 第一步:安装n ...

  7. 构建工具Bazel入门

    Bazel入门   原文:http://bazel.io/docs/getting-started.html 译者:chai2010 安装 安装过程请参考: http://bazel.io/docs/ ...

  8. TensorFlow的Bazel构建文件结构

    目录 说明 分析 全局设定文件:$TF_ROOT/WORKSPACE 外部依赖项入口:tensorflow/workspace.bzl 看看有多少package? 本来是想理解一下TF源码编译过程的, ...

  9. 前端项目构建工具---Grunt

    什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...

随机推荐

  1. F#之旅5 - 小实践之下载网页(爬虫基础库)

    参考文章:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-download.html 参考的文章教了我们如 ...

  2. PostSharp 4.0注册机实现过程

    PostSharp是基于.NET平台设计的比较强调易学易用的AOP框架. 什么是AOP? http://wayfarer.cnblogs.com/articles/241024.html 新版的已失效 ...

  3. 基于.NET平台常用的框架整理

    自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就 ...

  4. Drools API的使用学习

    Drools API的使用学习在 Drools 当中,规则的编译与运行要通过 Drools 提供的各种 API 来实现,这些 API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作 ...

  5. BZOJ 3110 [Zjoi2013]K大数查询 ——整体二分

    [题目分析] 整体二分显而易见. 自己YY了一下用树状数组区间修改,区间查询的操作. 又因为一个字母调了一下午. 貌似树状数组并不需要清空,可以用一个指针来维护,可以少一个log 懒得写了. [代码] ...

  6. 消息队列之ZeroMQ(C++)

    ZMQ是什么? 这是个类似于Socket的一系列接口,他跟Socket的区别是:普通 的socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的 ...

  7. JavaScript使用封装

    基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...

  8. d8fs9f

    你好 - Helloworld 1. a 2. b 3. c 来自为知笔记(Wiz)

  9. Angular 单元格合并

    在Angular实现表格输出的话,使用ng-repeat输出信息, 使用了: ng-repeat-start ng-repeat-end ng-hide="$first" < ...

  10. django _meta方法

    models.Book._meta.'concrete_model': <class 'books.models.Book'> models.Book._meta.'related_fke ...