【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Maven 将要投入 Guice 的怀抱

  • 2010-02-11
  • 本文字数:1241 字

    阅读完需:约 4 分钟

Sonatype 是一家专业的服务公司,资助了很多 Maven 开发者的开发工作。近日 Sonatype 计划将 Maven 迁移到 Guice Dependency Injection(DI)容器上的插件层以替代 Plexus DI 容器。显然,使用 Guice 并不是一个草率的决定。Plexus 是个过时的 DI 容器,用于 Maven 的所用版本中。 Jason van Zyl (Maven 项目与 Sonatype 创建者)说最初在构想 Maven 1.0 时之所以使用 Plexus 是因为它是当时仅有的几个选择之一;在那个时候,Avalon(已经废弃的 Apache 项目)则是另一个知名的 DI 解决方案。

Maven 是个构建工具,采取约定优于配置的启发式手段进行应用的构建。虽然功能非常强大,但还是有很多人抱怨 Maven 不太灵活。要想通过 Maven 完成某个任务,用户需要对已有的插件进行配置(这非常简单)或是编写自己的插件,但很多开发者都不愿意写插件。插件都会用到 Maven 运行时中的 Plexus。插件开发者需要掌握 Plexus 才能定制 Maven 插件或是更好地理解现有的插件——这非常不爽,因为 Plexus 的文档非常差劲。除了差劲的文档外,van Zyl 还提到了用 Guice 替换掉 Plexus 的诸多原因。他呼吁大家不要再向 Plexus 项目进行提交了,因为 Maven 项目不打算自己构建并支持 DI 容器,而是向开发者及构建者提供构建工具与基础设施。

同时,另一个围绕着 Maven 进行的项目(叫做 Polyglot Maven )承诺了很多增强以简化 Maven 使用与插件的编写,这包括支持用其他语言(如 Groovy 或是 Scala 等)编写 Maven pom 文件。

Guice 是由 Google(其中包括 Bob Lee )开发的一个流行的 DI 容器。凭借 Guice,我们能够通过编程的方式将实现类绑定到接口上,然后通过 Guice @Inject 注解将生成的实例注入到构造方法、方法或是属性中。

最近,Guice 增加了对 JSR 330 的支持。JSR 330 定义了一套可移植又好用的 DI 功能子集,将被不同的 DI 容器实现。现在就有很多 DI 容器已经实现了该规范,如 Guice 和 SpringSource 的 Spring Framework 。Bob Lee 和 Jason van Zyl 都是 JSR 330 专家组的成员。Maven 的 Guice 支持将通过 JSR 330 注解实现,这样就具备了可移植性。为了确保能从 Plexus 平滑迁移到 Guice 上,Maven 将使用 Guice 构建一个桥接层。在经过了多方比较后最终确定 Maven 是唯一一个能够轻松从 Plexus 进行迁移的 DI 容器,这样最后的决定也就不言而喻了。

Guice 还提供了其他一些优秀的特性:支持 peaberry( peaberry 是构建在 Guice 上的一个扩展模块,可以对动态 OSGi 服务进行解析和注入)、类型安全及定义良好的错误消息等。虽说某些特性并非 Guice 所独有,但 Guice 的的确确为我们提供了一个选择。Maven 团队现在不得不支持 Guice 的一个修补版本以满足其需求。van Zyl 说大部分内容正在实现当中,而有些则已经实现了。尚未实现的要么是不太重要的,要么仍处在测试和验证阶段。

其他一些项目(如知名的 Nexus server、Tycho 等等)也已经准备开始集成 Guice 了,在 Sonatype 最终完成 Maven 的重构后,这些集成也会延伸至 Sonatype 的其他项目中。

查看英文原文: Maven to be Built on Guice

2010-02-11 19:462526
用户头像

发布了 88 篇内容, 共 258.5 次阅读, 收获喜欢 8 次。

关注

评论

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

非标产品如何提升竞争力?

菜根老谭

产品经理 产品感

小红书、抖音社交媒体如何实现电商流程管理自动化

RestCloud

零代码 社交媒体 APPlink

分布式基础概念-消息中间件[RocketMQ]

派大星

RocketMQ 消息中间件 Java 面试题

DAPP算力云矿机系统开发丨源码技术搭建

l8l259l3365

如何选择适合自己需求的云服务器?

Finovy Cloud

云计算 云服务 云服务器 云服务器ECS

Apollo开放平台9.0让自动驾驶开发者轻松上手

石臻臻的杂货铺

人工智能 AI

2024中国国际工业计算机技术展览会

吹吹晚风

什么是小程序插件?

Geek_2305a8

【B/S架构】医院不良事件报告系统源码

源码星辰

测试编排技术:实战前置接口响应数据引用

Apifox

测试 自动化测试 接口测试 测试工具 测试自动化

如何基于jmx exporter监控java应用

蝉翼2u

Prometheus CloudNative 现代监控系统 jmx exporter

NFTScan 与蚂蚁数科旗下 ZAN 达成战略合作

NFT Research

节点 NFT\ NFTScan #Web3

Lazada商品详情API在电商中的价值及实时数据获取实践

Noah

大模型训练:多模态预训练的未来

百度开发者中心

人工智能 大模型

玩转Sermant开发,开发者能力机制解析

华为云开发者联盟

开发 开发工具 华为云 华为云开发者联盟

Lightroom Classic 2022 中文最新版:mac图像编辑必备

mac大玩家j

Mac软件 图像编辑器 Mac图像处理工具

快应用与小程序的“轻应用”市场

Geek_2305a8

2023开源产业生态大会|华为深耕基础软件开源 使能千行百业创新

新消费日报

2024深圳国际3C自动化装配与测试展览会

吹吹晚风

大模型训练中的Prompt Learning

百度开发者中心

人工智能 大模型

直播预约丨《实时湖仓实践五讲》第五讲:实时湖仓领域的最佳实践解析

袋鼠云数栈

大数据 数据湖 直播 湖仓一体 实时湖仓

读《重构-改善既有代码的设计》的一些思考

air

读书 软件开发 重构

系统内存测试工具 Micromat Lifespan激活最新版

胖墩儿不胖y

Mac软件 系统检测工具

测试管理圆桌讨论会 | 解锁测试管理的核心问题,提升您的管理实力!

测吧(北京)科技有限公司

测试

光纤怎么接入网呢?

小齐写代码

一文读懂什么是智能工厂?

天津汇柏科技有限公司

智能工厂

2024深圳国际智能驾驶舱及车载显示技术展览会

吹吹晚风

NineData成功举办《国产数据库共话未来趋势》技术沙龙:大咖云集,共话未来

NineData

postgresql 阿里云 国产数据库 polarDB NineData

OmniReader Pro for Mac(图书阅读软件) 2.6.4永久激活版

mac

苹果mac Windows软件 OmniReader Pro 阅读软件

揭开事件循环的神秘面纱

百度Geek说

web前端 事件循环 企业号12月PK榜

2024中国国际电子元器件展览会

吹吹晚风

Maven将要投入Guice的怀抱_Java_Josh Long_InfoQ精选文章