写点什么

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

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

关注

评论

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

阿里,快手,拼多多等7家大厂Java面试真题,Java笔试题及答案详解

Java 程序员 后端

测试开发之前端篇-CSS层叠式样式表

禅道项目管理

CSS html

乘着汽车智能化的浪潮,“汽车人”的职业方向选择(三)

SOA开发者

软件定义汽车 车载控制单元

FunTester框架Redis性能测试之list操作

FunTester

redis 性能测试 测试框架 压力测试 FunTester

mydumper备份工具介绍与使用

Simon

MySQL

汽车智能座舱中 显示屏市场战略趋势分析 上篇

SOA开发者

软件定义汽车

为什么不推荐Python初学者直接看项目源码

Felix

Python 编程 开发 Programing 阅读代码

与springcloud整合的框架源码读取入口

Java 编程 架构 微服务

Alibaba内部“Java架构核心宝典”来袭,全新技术限时开源

Java 编程 程序员 架构 面试

作为一线技术人员,如何更好地提升自己

谙忆

管理 成长 引航计划

CSS 轻松制作 SVG 动画

devpoint

css3 SVG 9月日更

阿里巴巴发布“限量版”Java零基础宝典,万字Java技术类校招面试题汇总

Java 程序员 后端

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的

梦想橡皮擦

9月日更

一部好看过武侠小说的热血互联网史!

博文视点Broadview

基于Tensorflow + Opencv 实现CNN自定义图像分类

华为云开发者联盟

tensorflow KNN OpenCV CNN

幻读是啥,会有什么问题?如何解决?

Java MySQL 数据库 面试 后端

Percolator模型及其在TiKV中的实现

vivo互联网技术

数据库 Percolator 分布式,

二十不惑的年纪,我简直走了狗屎运(4面拿字节跳动offer)

Java 程序员 架构 面试 计算机

开便利店可以实现财富自由吗?

石头IT视角

主机安全是什么意思?安全体检包含哪些方面?

行云管家

运维 服务器 主机 主机安全 安全体检

深入理解掌握零拷贝技术

Linux服务器开发

网络协议 零拷贝 Linux服务器开发 Linux内核 用户态

2021年公有云市场的5大趋势

云计算

阿里巴巴Java方向面试题汇总(含答案),为什么数据库会丢失数据

Java 程序员 后端

阿里巴巴发布“限量版”Java零基础宝典,38岁的中年失业者怎么活下去

Java 程序员 后端

阿里,快手,拼多多等7家大厂Java面试真题,Java开发面经分享

Java 程序员 后端

iOS开发面试拿offer攻略之数据结构与算法篇附加安全加密

iOSer

ios 数据加密 iOS面试 iOS逆向 iOS算法

Shell:Lite OS在线调试工具知多少

华为云开发者联盟

Shell 操作系统 Lite OS 在线调试 命令函数

阿里,快手,拼多多等7家大厂Java面试真题,Java面试题高级

Java 程序员 后端

Linux用户密码管理

在即

9月日更

堡垒机作用之事后审计详细讲解-行云管家

行云管家

运维 网络安全 运维审计 事后审计

千万级数据迁移与分表的技术方案-企业产品实战

谙忆

Java 后端 分库分表 引航计划

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