写点什么

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

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

关注

评论

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

爱奇艺数据质量监控的探索和实践

爱奇艺技术产品团队

监控 数据治理 pingback

上汽零束汽车智能应用创意大赛,初赛作品评选将启动!

SOA开发者

细节理解!阿里内部Java高并发系统设计全彩手册曝光!霸榜GitHub

进击的王小二

Java 架构 高并发 Java性能调优

9. python 入门教程快速复习,序列,数值类型,字符串方法,列表、集合、字典方法,文件操作,解析式

梦想橡皮擦

10月月更

不可思议!阿里大佬熬夜9天整理出749的HotSpot VM源码笔记

Java 架构 面试 程序人生 编程语言

第 13 章 -《Linux 一学就会》- Linux文件系统结构

学神来啦

Linux 运维 linux学习

“云智一体”系列白皮书智能视频篇来了!

百度大脑

人工智能

系统召回太慢?上 Milvus × PaddleRec 双剑合璧大法!

Zilliz

数据库 推荐算法 召回 向量检索

看一遍就理解:MVCC原理详解

Java MySQL 架构 面试 后端

211本+985硕+计算机专业投面百度,坐等一周迎来三面,已拿offer

Java 程序员 架构 编程语言

语音翻译器 Tech Support

凌天一击

聊一聊物联网嵌入式芯片的内容结构

华为云开发者联盟

物联网 内存 存储 嵌入式 芯片

OBServer启动恢复解析

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 数据库大赛

云资源是什么意思?有什么特点?

行云管家

云计算 云服务 多云服务 云资源

2021年10月4日Facebook史上最严重宕机复盘分析

郑州埃文科技

ip数据 网络波动 网动仪

KubeVela 1.1 发布,开启混合环境应用交付新里程碑

阿里巴巴云原生

阿里云 云原生 KubeVela

华为技术官珍藏版:SpringBoot全优笔记,面面俱到,实在太全面了

Java 架构 面试 微服务 后端

盘点后端领域的点点滴滴 | 引航计划|后端

xcbeyond

后端 引航计划 内容合集 技术专题合集

Superior Scheduler:带你了解FusionInsight MRS的超级调度器

华为云开发者联盟

大数据 hadoop 开源 调度器 FusionInsight MRS

什么是激光雷达的“发动机技术”?一文讲透行业技术壁垒 (一)

SOA开发者

Vue进阶(幺贰捌):Vue插槽:slot、slot-scope与指令v-slot应用讲解

No Silver Bullet

Vue 插槽 10月月更

什么是激光雷达的“发动机技术”?一文讲透行业技术壁垒(二)

SOA开发者

【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析

码界西柚

Disruptor 异步高性能 高并发处理 性能提升 10月月更

物理服务器是什么意思?怎么构成?与云服务器有啥区别?

行云管家

云计算 服务器 云服务器 物理服务器

企业运维监控管理系统我给推荐行云管家!

行云管家

云计算 运维 运维监控 云管平台

想了解Xtrabackup备份原理和常见问题分析,看这篇就够了

华为云开发者联盟

MySQL 数据库 华为云 备份 XtraBackup

架构实战营 毕业设计项目

蔸蔸

直播回顾 | 云和恩墨范计杰:Oracle DBA的SQL编写技能提升宝典(含SQL资源)

墨天轮

oracle sql 函数

高并发中的 限流、熔断、降级、预热、背压!

进击的王小二

高并发 java

上汽零束汽车智能应用创意大赛,初赛作品评选将启动!

SOA开发者平台

在GitHub标星86k+霸榜的某宝Redis核心原理深度实践PDF限时开源!

Java 架构 面试 程序人生 编程语言

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