NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Gradle 引入构建审视(Build Scans)功能

  • 2017-01-03
  • 本文字数:3377 字

    阅读完需:约 11 分钟

在今年早些时候举办的 Gradle 峰会上,Gradle 团队在发布 Gradle 构建工具 3.0 版本的同时,引入了 _Gradle 云服务(Gradle Cloud Services)_。该服务“通过为 Gradle 构建工具增加新功能,并从新的角度分析你或你团队项目构建的过程,来提升自动化构建的效率和生产力”。其中第一个提供的云服务是 _ 构建审视(build scans)_ 功能。

在 Gradle构建审视功能用户手册中是这样定义的:

构建审视是用于开发和维护 Gradle 构建的重要工具。它为你提供了构建的详细信息,并为你识别构建环境、依赖或性能上存在的问题,同时可以帮你更全面地理解并提升构建过程,也便于与他人的合作。

在 Gradle 构建运行时,构建审视插件会抓取数据,并将数据传送到构建审视服务端。同时返回一个可被共享的链接,内部包含 _ 有用的构建信息 _。这些信息包含两大类:

  • 环境信息,包括操作系统、Java 版本和时区
  • 构建相关信息,包含使用的插件、任务、测试以及依赖信息

但它不会记录项目的源码和其 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

InfoQ:能介绍一下您目前在 Gradle 的职位么?

Beams:我在 Gradle 公司管理市场方面的工作。在此之前,我是一名 Gradle 构建工具团队的首席工程师。

InfoQ:从现状看来 Gradle 正与 Maven Ant Pants等其他构建工具拉开差距,比如引入 Gradle 守护进程(Gradle daemon)、新的 Gradle 云服务和构建审视等。您期望其他的工具也实现这些特性么?

Beams:不太可能。就 Gradle 守护进程而言,它是我们提炼了多年工作经验的产物。并不是其他工具简单说一句“我也可以支持该功能”就能轻松实现的,至少无法达到适用于生产环境的水平。但是 Bazel 工具就另当别论了,它和 Gradle 守护进程一样采用了客户端、服务端模式。

而 Gradle 云服务,包括其中的构建审视功能,就远远超越了传统的构建工具特性。它是我们大规模自动化构建 _ 平台 _ 的一部分。这个构建平台是一个耗资巨大的项目,这也意味着,如果背后没有一家像我们这样致力于自动化构建,并在这方面作出巨大投资的公司来支持,不太可能实现这个特性。

InfoQ:您认为是什么因素使得 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 上获得更多信息。

InfoQ:您能简单介绍下 Gradle 接下来的目标么?

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

2017-01-03 18:007915
用户头像

发布了 41 篇内容, 共 12.9 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

AlmaLinux安装OpenVINO

IT蜗壳-Tango

IT蜗壳 OpenVINO 11月日更

模块三-架构详细文档

🌾🌾🌾小麦🌾🌾🌾

架构实战营

Moment.js 如何获得当前时间的零时时间

HoneyMoose

对比 Apache Kafka 和 Apache Pulsar 创建工作队列

Apache Pulsar

kafka 分布式 中间件 Apache Pulsar 工作队列

Go语言,语法糖规则,可别掉入陷阱

微客鸟窝

Go 语言 11月日更

如何优雅的获取 Mac OS 系统 IP 地址?

liuzhen007

11月日更

当AI能够在15分钟内部署,世界距离大变革不远了

百度大脑

人工智能

Mysql事务的实现原理之Redo Log的分析

卢卡多多

Redo Log 11月日更

[Pulsar] 使用Proxy进行认证和鉴权

Zike Yang

Apache Pulsar 11月日更

如何给 CloudWeGo 做贡献

baiyutang

golang 微服务 11月日更

2021最新Apache漏洞分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

Apache Pulsar 与 Kafka 性能比较:延迟性(测试过程)

Apache Pulsar

kafka 分布式 云原生 消息中间件 Apache Pulsar 消息系统

开源数据库OceanBase源码解读(九):tableAPI和OB多模型

OceanBase 数据库

数据库 开源 oceanbase

JavaScript 的 parseInt() 函数

HoneyMoose

0711作业:MapReduce 编程作业

arctec

飞桨中国行——企业服务专场

百度大脑

人工智能

回收与价值赋能:动力电池的“退休”之旅

脑极体

Prometheus Exporter (一)Node Exporter

耳东@Erdong

Linux Prometheus exporter 11月日更 Node Exporter

Moment.js 如何使用 Epoch Time 来构造对象

HoneyMoose

Apache Pulsar 与 Kafka 性能比较:延迟性(测试结果)

Apache Pulsar

kafka 云原生 Apache Pulsar 消息 延迟性

助力政企自动化自然生长,华为WeAutomate RPA是怎么做到的?

王吉伟频道

华为 RPA WeAutomate 政企 超自动化

OceanBase 监控工具 OBAgent

OceanBase 数据库

数据库 开源 学习方法 分布式 oceanbase

一个基于PoS共识算法的区块链实例解析(升级版)

Regan Yue

区块链 共识算法 Go 语言 11月日更

javaScript基础篇之数组是怎样锻炼你的逻辑能力

你好bk

JavaScript 大前端 数组 数组合并

零拷贝原理的文章网上满天飞,但你知道如何使用零拷贝吗?

中间件兴趣圈

Netty 零拷贝 11月日更

云迹科技林小俊:商业服务机器人如何破局“低价+同质化”?

朋湖网

.NET6新东西--隐式命名空间引用

喵叔

11月日更

NodeJs深入浅出之旅:文件系统

空城机

大前端 Node 11月日更

元宇宙和当今最活跃的三家元宇宙平台

devpoint

以太坊 元宇宙 11月日更

去安定医院看失眠,有必要吗?

脑极体

【LeetCode】K 个一组翻转链表Java题解

Albert

算法 LeetCode 11月日更

Gradle引入构建审视(Build Scans)功能_Java_Michael Redlich_InfoQ精选文章