写点什么

LinkedIn 的 Gradle 与 Play 框架集成实践

  • 2015-04-21
  • 本文字数:1189 字

    阅读完需:约 4 分钟

用 Gradle开发 Play应用

LinkedIn 最近采用了 Play 作为 UI 开发的 Web 框架。不过随着与 Play 的集成规模越来越大,LinkedIn 正在计划用 Gradle 构建 Play 应用。

背景:代码组织

LinkedIn 围绕着公共 API 和服务组织代码仓库,每个仓库称为一个 Multiproduct 。按照 Multiproduct 组织代码的后果就是所有的构建都是多项目的。每个 Multiproduct 有数十甚至上百个项目,每个项目都会有一个或多个产出物。LinkedIn 的应用 classpath 中包含 500 多个 jar 文件。这意味着超过 500 个节点的完全解析依赖关系图。解析这个依赖关系图,严重依赖于冲突解决规则。LinkedIn 在 Multiproduct 级别解析版本,而不是在产出物(如 JAR 文件)级别。这能确保来自于同一个 Multiproduct 的所有产出物拥有一致的版本。

SBT**** 的可扩展性挑战

Play 的默认构建系统是 SBT 。虽然在大多数人印象中这两者是不可分割的,实际上从技术角度来说他们是相互解耦的。当开始构建 Play 应用时,LinkedIn 迅速陷入了 SBT 和底层 Apache Ivy 库的可扩展性挑战中。应用的依赖解析需要花费 5-10 分钟,更夸张的是,某个底层的基础项目的依赖解析需要 30 分钟以上。

集成 Gradle**** 和 Play

考虑到 LinkedIn 在过去三年半的时间里,一直在使用 Gradle 构建几乎所有大大小小的项目。而且 2015 年 Gradle 还会新增许多激动人心的功能。此外,Play 和Gradle 的集成也会让这两种技术的价值都有显著提升。LinkedIn 已经决定与 Gradleware 共同合作探索如何使之成为现实。2015 年上半年主要精力集中在如何实现和测试两者的集成,分为如下三个里程碑:

里程碑 1:用 Gradle 构建 Play 应用

  • 在这一里程碑中,开发者将可以使用 Gradle 中的 play 插件构建 Play 应用

里程碑 2:持续模式和热加载

  • 在这一里程碑中,将在 Gradle 中引入与 SBT 中的持续模式等效的“watcher”模式: gradle --watch run

里程碑 3:梦想成真

  • 最后一个里程碑的主要工作包括文档,与集成,以及 Scala 代码质量插件,此外还会增加 Scala 交互式终端功能

更多的技术细节可以参见 Github 上 Gradle 的 Play 支持说明文档

更多信息

目前里程碑 1 的功能已经完成,有兴趣尝试的读者可以从 Gradle 网站上下载 Gradle 的每日构建版本。完整的发布包中包含二进制代码、源代码以及示例项目。Play 应用示例位于“samples/play”文件夹下。其中 basic 示例演示了 play 插件的声明和必须的仓库配置; advanced 示例展示如何配置目标 Play/Scala 的版本。 m ultiproject 示例则包含了一个标准的 Gradle Multiproject 构建。

此外,LinkedIn 还对早期的构建和初步的依赖解析进行了性能评估。感兴趣的读者可以从 LinkedIn 的博客中了解更多的细节。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流。

2015-04-21 08:523128
用户头像

发布了 75 篇内容, 共 66.9 次阅读, 收获喜欢 6 次。

关注

评论

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

直播预告|大咖共话:汽车行业数字化转型趋势与对策

3DCAT实时渲染

软件测试的三个沟通技巧

FunTester

高并发、高可用、弹性扩展,天翼云护航企业云上业务

天翼云开发者社区

云计算 服务器

ShardingSphere-Proxy 前端协议问题排查方法及案例

SphereEx

数据库 ShardingSphere

提升可观测性 - 业务指标监控实践

bilibili游戏技术

2022最新Java面试突击手册,1000道面试题+优质面经

Java全栈架构师

Java 程序员 面试 算法 计算机网络

中国SSD行业企业势力全景图

ToB行业头条

这个简单的小功能,半年为我们产研团队省下213个小时

阿里云云效

云计算 阿里云 云原生 产品开发 研发

TDengine ×英特尔®边缘洞见软件包 加速传统行业的数字化转型

TDengine

数据库 tdengine 时序数据库

如何高效优雅地管理接口文档

Liam

测试 开发工具 API接口管理 API文档 免费API接口

构建实战化防御体系之立体防渗透

穿过生命散发芬芳

6月月更 攻防演练

大型体育赛事与犯罪风险

清林情报分析师

数据分析 警务技术 警务安全 风险分析 犯罪预防

天翼云Web应用防火墙(边缘云版)通过首批可信认证

天翼云开发者社区

OneFlow源码解析:算子签名的自动推断

OneFlow

源码解析 算子 Relu

为什么要使用 Rust 语言?

面向加薪学习

rust

IDC:阿里云获2021中国数据治理平台市场份额第一

阿里云大数据AI技术

数据挖掘 大数据 数据采集

应用实践 | 10 亿数据秒级关联,货拉拉基于 Apache Doris 的 OLAP 体系演进(附 PPT 下载)

SelectDB

数据库 flink OLAP Doris 数仓建设

安全 创新 实践|海泰方圆受邀参加“数字时代的网信创新与价值共创”技术交流研讨会

电子信息发烧客

基于管线的混合渲染

Finovy Cloud

gpu 渲染器 GPU服务器 显卡、gpu

Mac中Git如何忽略.DS_Store文件

坚果

git git 规范 6月月更

直播预告|SQL也能玩转工业级机器学习?MLOps meetup V3带你一探究竟!

星策开源社区

人工智能 机器学习 sql 特征平台 MLOps

终于有人用7部分讲明白了Spring Security OAuth2.0认证授权全过程

Java全栈架构师

Java spring 程序员 面试 springsecurity

十大靠谱“计算机视觉数据集”榜单

澳鹏Appen

人工智能 机器学习 计算机视觉 数据集 训练数据

如何设计业务高性能高可用计算架构 - 作业

阿拉阿拉幽幽

Android Target 31 升级全攻略 —— 记阿里首个超级 App 的坎坷升级之路

阿里巴巴终端技术

android App target

Curve 替换 Ceph 在网易云音乐的实践

网易数帆

分布式 云原生 存储 Ceph curve

OUT了吧,Kafka能实现消息延时了

华为云开发者联盟

云计算 开发

奇怪,为什么ArrayList初始化容量大小为10?HashMap的初始化容量为16?

Java全栈架构师

Java 源码 程序员 面试 程序人生

微博评论的高性能高可用计算架构方案

joak

电商秒杀系统架构设计

哈喽

「架构实战营」

华为云的AI深潜之旅

脑极体

LinkedIn的Gradle与Play框架集成实践_Web框架_丛一_InfoQ精选文章