写点什么

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:523118
用户头像

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

关注

评论

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

《面试八股文》之2024年GitHub中文社区Java 领域又一份牛逼笔记

Summer

Java 程序员 面试 架构师 大厂

金三银四 Java 面试八股文高频题精选 700 道(附答案整理)

Summer

Java 程序员 面试 架构师 大厂

【杂谈】如何选择:Session 还是 JWT?

不在线第一只蜗牛

JavaScript 前端 服务器

低代码和无代码:简单概念之下的深刻内涵

优秀

低代码 无代码

SD-WAN组网给企业带来的便利

Ogcloud

SD-WAN 组网 企业组网 SD-WAN组网 SD-WAN国际专线

微店API接口深度探索:如何高效获取商品详情及代码示例

代码忍者

微店API接口 微店商品详情API接口

深度探索京东API接口:如何高效获取SKU详细信息与商品详情,附带实战代码示例

代码忍者

京东API接口

天润融通助力连锁商超,客户感知驱动爆款单品打造

天润融通

阿里巴巴1688 API接口详解:轻松获取商品详情与店铺所有商品信息

代码忍者

1688API接口 关键词搜索1688API

流存储Fluss:迈向湖流一体架构

Apache Flink

大数据 flink 实时计算 实时数据分析 Fluss

新增市场份额超30%,昇思MindSpore成为AI框架的新选择

Alter

OpenSea基金会成立:NFT市场复苏与空投掘金季来临

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

华为应用市场召开首届“编辑之选创享会”,推动原生鸿蒙应用生态持续创新

最新动态

淘宝天猫API接口深度解析:如何高效利用商品详情与关键词搜索商品列表功能

代码忍者

淘宝API接口

天润融通客服系统升级,智能托管让员工效率飞跃

天润融通

SD-WAN跨国专线提供的固定IP有什么好处?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商 SD-WAN国际专线 跨国网络专线

详解GaussDB(DWS)逻辑集群,如何化解大规模业务数据管理难题

华为云开发者联盟

数据库 数据仓库 GaussDB 逻辑集群

站外商详的重构与优化|得物技术

得物技术

前端 H5

用豆包MarsCode IDE,从0到1画出精美数据大屏!

TRAE.ai

JavaScript AI AI编程 豆包MarsCode

面向不同岗位的开发人员,平台工程都具备哪些能力?

行云创新

开发者 云原生 架构师 平台工程

天润融通走进蚂蚁集团|AI助力客户经营,打开企业增效密码

天润融通

inBuilder低代码平台特性推荐系列第二十八期——一键生成补丁

inBuilder低代码平台

运维 低代码 补丁

什么是二级域名?一级域名和二级域名有什么区别?

防火墙后吃泡面

【年度高价值技术团队】ProtonBase 荣登 InfoQ 2024 中国技术力量年度榜单!

ProtonBase

#云原生 #人工智能 #大数据 protonbase datawarebase

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