在今年早些时候举办的 Gradle峰会 上,Gradle团队在发布Gradle构建工具3.0版本的同时, 引入 了 Gradle云服务(Gradle Cloud Services) 。该服务“通过为Gradle构建工具增加新功能,并从新的角度分析你或你团队项目构建的过程,来提升自动化构建的效率和生产力”。其中第一个提供的云服务是 构建审视(build scans) 功能。
在Gradle 构建审视功能用户手册 中是这样定义的:
构建审视是用于开发和维护Gradle构建的重要工具。它为你提供了构建的详细信息,并为你识别构建环境、依赖或性能上存在的问题,同时可以帮你更全面地理解并提升构建过程,也便于与他人的合作。
在Gradle构建运行时, 构建审视插件 会抓取数据,并将数据传送到构建审视服务端。同时返回一个可被共享的链接,内部包含 有用的构建信息 。这些 信息 包含两大类:
但它不会记录项目的源码和其artifacts,比如JAR包。
要为一个现存的Gradle项目增加构建审视功能,需要在build.gradle文件中增加如下配置:
plugins { id 'com.gradle.build-scan' version '1.3' id 'java' }
buildScan { licenseAgreementUrl = 'https://gradle.com/terms-of-service' licenseAgree = 'yes' tag 'SAMPLE' link 'GitHub','https://github.com/gradle/gradle-build-scan-quickstart' }
构建项目时,在命令行中增加-Dscan开关,就会触发构建审视:
$ gradle build -Dscan
在一系列简单的激活操作后,项目的构建信息就可以在线被查看了,还可以通过永久链接分享给其他开发者。这使开发者之间可以互相协作,并更快地解决问题或评估构建的性能。
如果一个项目在单元测试阶段失败或源码存在错误,构建审视的结果会像如下 例子 所示:
相反,如果项目通过了全部单元测试,且构建成功,则构建审视的结果会像下面的 例子 所示:
在以上任意情况下,都可以交互式地查看详细信息。其中还列出了各部分的构建耗时,用户可以使用这些信息来监控其性能。
在GitHub上可以找到完整的 示例项目 。
诸多知名开源项目,如 Hibernate 、 JUnit 5 、 Ratpack ,在开发 各自项目 时都使用上了Gradle的构建审视功能。
InfoQ就Gradle、Gradle云服务和构建审视功能,专访Gradle市场主管 Chris Beams 。
Beams:我在Gradle公司管理市场方面的工作。在此之前,我是一名Gradle构建工具团队的首席工程师。
InfoQ:从现状看来Gradle正与 Maven 、 Ant 、 Pants 等其他构建工具拉开差距,比如引入Gradle守护进程(Gradle daemon)、新的Gradle云服务和构建审视等。您期望其他的工具也实现这些特性么?
Beams:不太可能。就Gradle守护进程而言,它是我们提炼了多年工作经验的产物。并不是其他工具简单说一句“我也可以支持该功能”就能轻松实现的,至少无法达到适用于生产环境的水平。但是Bazel工具就另当别论了,它和Gradle守护进程一样采用了客户端、服务端模式。
而Gradle云服务,包括其中的构建审视功能,就远远超越了传统的构建工具特性。它是我们大规模自动化构建 平台 的一部分。这个构建平台是一个耗资巨大的项目,这也意味着,如果背后没有一家像我们这样致力于自动化构建,并在这方面作出巨大投资的公司来支持,不太可能实现这个特性。
Beams:有诸多因素造就了Gradle今天的与众不同。当然,其中一大因素就是它所拥有的一系列特性。从Gradle的原创特性,如增量构建(incremental builds),到全新的杀手级特性,如混合构建(composite builds),我们认为这些特性是Gradle成功从与诸多其他构建工具的竞争中脱颖而出的一大因素。你可以在 https://gradle.org/maven_vs_gradle 上找到详尽的Gradle特性列表,以及各特性与Maven的对比。
另一个因素是Gradle构建工具日趋完善的通用性。Gradle是使用Java语言实现的,并扎根于基于Java虚拟机的项目上,但是如今Gradle支持构建不同语言和生态系统的项目,其中包括C、C++及Android。还有LinkedIn最近贡献的PyGradle插件,为Gradle增加了对Python项目的支持。Gradle正成为第一个真正的通用构建工具,这对我们来说非常重要,因为这意味着各种形式和规模的语言社区,甚至是目前尚不存在的,都可以把Gradle作为高级自动化构建的基础,而不用重新创建自己的构建工具,从而能更快地发展语言本身。
Gradle在使用率上也胜过其他工具。我们见证了Gradle一直以来稳定的下载增幅,目前我们平均每月有250万的下载量。GitHub上还有数千使用Gradle构建的项目,同时,根据最近上线的GitHub Archive的数据,我们得知,大家在新建基于Java虚拟机的项目时,更倾向于使用Gradle。Gradle的插件生态系统也正蓬勃发展,现在在Gradle的插件门户页面上已经提供了上千个插件,这也意味着用户几乎所有的集成或构建需求都可以找到对应的插件。
我们不仅自豪于Gradle的下载量、项目数和用户量,我们更欣喜地看到,全世界许多非常受推崇的科技公司也在选择使用Gradle,而且是以非常公开的形式。细想Netflix备受瞩目的 Gradle插件集合Nebula ,LinkedIn频繁的 Gradle会谈 以及Google采用 Gradle构建Android项目 ,它们选择使用Gradle的原因正是其另一个独特特性:极度灵活性。Gradle可以满足它们极具挑战的自动化构建需求,因为Gradle认为,从根本上来说,项目的构建与你所构建的软件产品或服务的其他部分一样,都是代码,它们之间没有任何差别。事实上,Gradle也正是一个自动化软件生产的类库及框架。
最后还有一点,Gradle背后有一家专注于自动化构建且资金充裕的公司支持着。这也意味着我们可以聘请30多名工程师每日专注于改善Gradle,使其变得最好。而大部分其他工具并没有这个优势,这自然也就限制了它们的发展。
InfoQ:已经有 Hibernate 和 JUnit 5 等项目在使用Gradle的构建审视,您期望其他知名开源项目也在开发中使用构建审视这个功能么?
Beams:这值得拭目以待!我们很高兴地看到整个社区,包括各开源项目维护者和用户,对构建审视功能的反应。构建审视的好处是每个人可以在任何时刻创建它,并分享给任何人。我们认为公开的构建审视为用户在需要解释Gradle构建的具体过程时提供了便利,比如在Stack Overflow或GitHub上描述问题时,以及在与同事之间的交流中。欢迎大家都来尝试一下构建审视, 构建审视功能用户手册 是用于起步的绝佳教程。
同时我们也很高兴地看到大家对Gradle Enterprise的兴趣,这是一个Gradle云服务的私有版。它提供了公共构建审视服务的所有功能,同时包含了一些额外的管理特性,这些特性会为团队,尤其是大型团队,带来巨大帮助。读者可以从 https://gradle.com/enterprise 上获得更多信息。
Beams:2016年是我们高产的一年,我们实现了Gradle云服务,支持了混合构建,并在提升各种规模项目的构建性能方面做了巨大改进。
但是我们更期待2017将要发生的变化。一个值得关注的工作是,我们正在创建独立的以任务为中心的帮助文档,为新老用户找出最佳方法来解决Gradle自动化构建中遇到的问题。
我们也将继续在诸多前沿领域尽可能地优化构建性能。17年年初,我们会发布Gradle第一版任务输出缓存,它支持交叉构建,并提供跨机器缓存,缓存中会保存中间构建文件并可被重用于其他机器上的其他构建。我们已经在和全球一些大型科技公司的交流中了解到这个先进的缓存技术所将产生的巨大改变,我们迫不及待地期望大家能用上这个功能!
我们也将自动化分离Gradle所管理的依赖类库中的API及其实现。这样分离可以避免类库使用者在类库产生的API(更准确地说是ABI(应用程序二进制接口))没有发生变化时,不必要的编译,从而进一步提升构建性能。
在2017年初,我们还会发行1.0版Gradle Kotlin脚本,它将提供一种类型安全且对集成开发环境(IDE)极度友好的方式来编写Gradle构建脚本。
我们还有更多的计划,但是这里先不透露。谢谢今天的访谈!
Chris Beams是Gradle公司的市场主管,也是一位资深的开源工具开发者。在就职于Gradle之前,他是一名Spring Framework开发组成员。
查看英文原文: Introducing Gradle Build Scans