作者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. Fiddler问题 - creation of the root certificate was not successful

    打开cmd执行命令. d: cd D:\soft\Fiddler2 makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_ ...

  2. AudioSpecificConfig

    2个字节. 下面蓝色的为AudioSpecificConfig部分: 000001e0h: 00 00 00 00 00 AF 0011 90 00 00 00 0F 09 00 02; .....? ...

  3. 机器学习之K-近邻算法

    机器学习可分为监督学习和无监督学习.有监督学习就是有具体的分类信息,比如用来判定输入的是输入[a,b,c]中的一类:无监督学习就是不清楚最后的分类情况,也不会给目标值. K-近邻算法属于一种监督学习分 ...

  4. Idea中包内中的置文件如何发布到编译后的目录中去

    1.问题引入: 运行一个maven+springmvc+hibernate的项目的时候出现了下边的错误: Caused by: java.io.FileNotFoundException: class ...

  5. Android四种点击事件和五中存储方式

    Android点击事件的四种实现方式 1.内部类实现onClickListenter接口 bt_login.setOnClickListener(new MyListener()); class My ...

  6. 一个快速排序(分类)及使用类似思想实现选择问题[c++实现]

    一.快速排序(快速分类)算法: 问题描述:给定线性集中n个元素和一个整数k,1<=k<=n,要求找出这n个元素中第k小的元素. 思想:选取数组A中的某个元素 t=A[s],然后将其他元素重 ...

  7. React Native MAC上环境搭建笔记

    今天花了一点时间搭建了一下react native环境,在这个过程中遇到了一些问题,处理并总结一下,年纪大了记性不好,只能多写写...真是岁月不饶人啊! 第一步:安装最新版本的Xcode工具 第二步: ...

  8. SOAPUI使用教程-REST服务和WADL

    首先创建一个新的REST项目: 选择文件|新建项目REST从主菜单: 通常情况下,我们可能会只提供一个URI 点击导入消耗. 在新建项目消耗对话框: 点击浏览. 然后,我们可以浏览到该文件: 点击   ...

  9. 基于lcov实现的增量代码UT覆盖率检查

    背景介绍 配合CppUTest单元测试框架,lcov提供了一套比较完整的工程工具来对UT覆盖率进行度量.但对有些团队来说,历史负担太重,大量的遗留代码没有相应的UT.在这种情况下,对新增代码进行覆盖率 ...

  10. 【尺取】POJ 3320

    POJ 3320 Jessica's Reading Problem 题意:一本书P页,第i页有ai知识点,问你至少从某一处开始连续要翻多少页才能复习完所有的知识点,不能跨页翻. 思路:<挑战程 ...