写点什么

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

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

关注

评论

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

想要了解华为IPD,先要了解需求如何管理!

华为云PaaS服务小智

需求管理 软件开发 华为云

CSIG青年科学家会议圆满举行,合合信息打造智能文档处理融合研究新范式

合合技术团队

科技 大模型 合合信息 GPT-4

海外网络加速:突破地域限制,畅联全球

Ogcloud

网络 网络加速 vpn 网络VPN

软件测试/测试开发/全日制 | 实现实时通信:Python全栈开发中的WebSocket实践

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

测试

效果图渲染角度哪什么小技巧?10个效果图渲染技巧

Renderbus瑞云渲染农场

云渲染 渲染农场 瑞云渲染 Renderbus云渲染农场 效果图渲染

软件测试开发/全日制丨面试题:中间件-淘汰缓存还是更新缓存

测试人

redis 软件测试 面试题 中间件 测试开发

React Native 打包 App 发布 iOS 及加固混淆过程

多策略深度智能分货拣货,助力快消品企业提升核心竞争力

用友BIP

你的数智化底座物尽其用了吗?

用友BIP

数智底座

圣诞节来临,如何用海外云手机给亚马逊店铺引流?

Ogcloud

云服务 手机云服务 云服务商

云渲染电脑可以关吗?瑞云渲染客户端能断开网络吗?

Renderbus瑞云渲染农场

云渲染 渲染农场 瑞云渲染

如何将支持标准可观测性协议的中间件快速接入观测

观测云

可观测性 HBase

免费部署试用的低代码开发工具分享(100%源码)

互联网工科生

低代码 JNPF

软件测试/测试开发/全日制 | 从HTML到React:Python全栈开发中的前端框架应用

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

测试

AI大模型与低代码开发应用的完美融合

EquatorCoco

人工智能 AI 低代码 大模型

软件测试/测试开发/全日制 | 前后端数据交互与Fetch API应用

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

测试

强大防护:如何选择最佳美国高防服务器租用服务

一只扑棱蛾子

美国服务器 美国高防服务器

软件测试/测试开发/全日制 | Python全栈开发中的前端工具与构建流程

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

测试

软件测试/测试开发/全日制 | Python全栈开发:利用Docker实现应用容器化

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

测试

CloudXR在农业领域的用例表现

3DCAT实时渲染

CLOUDXR 云化XR

Sound Control for Mac(mac应用音量控制软件) 2.6.4中文激活版

mac

苹果mac Windows软件 sound control

专业开发者的软件开发神器——低代码

高端章鱼哥

软件开发 低代码

软件测试/测试开发/全日制 | 从MySQL到MongoDB:Python全栈开发中的数据库选择

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

测试

软件测试/人工智能/全日制 | Python全栈开发:理解HTTPS加密机制与安全传输

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

测试

软件测试/测试开发/全日制 | Python全栈开发中的消息队列应用

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

测试

深入理解经典红黑树 | 京东物流技术团队

京东科技开发者

iZotope RX 10 for mac(音频修复和增强软件) 10.4.2完美激活版

mac

苹果mac Windows软件 iZotope RX 10 音频修复和增强软件

软件开发项目延期,这么做项目保证按时交付

软件开发-梦幻运营部

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