写点什么

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

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

关注

评论

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

详解 SQL 的集合运算

悟空聊架构

数据库 sql 6月日更 集合运算

如何针对美工与设计师的Maya工具进行版本控制

龙智—DevSecOps解决方案

基于开源引擎打造自主可控服务体系

张亮

大数据 开源 To B业务

5分钟速读之Rust权威指南(二十二)迭代器

wzx

rust

建信金科大咖访谈:人脸识别技术的发展与应用

金科优源汇

小伙伴们在催更Spring系列,于是我写下了这篇注解汇总!!

冰河

spring 程序员 架构师 aop ioc

区块链技术让传统旅游业焕发新机

CECBC

话题讨论|从2021苹果全球开发者大会中,你得到了什么启发?

石云升

wwdc 话题讨论 6月日更

MySQL基础之十三:约束

打工人!

MySQL 6月日更

尽情阅读,技术进阶,详解mmap的原理

奔着腾讯去

c++ 内存管理 Mmap 虚拟内存 共享内存

数字经济下的数据库发展以及应用

容光

现代分布式架构设计原则-可观测性

余先生

微服务 监控 日志 可观测性 链路追踪

前端 JS 之 AJAX 简介及使用

编程三昧

JavaScript ajax 大前端 异步请求

从货币流动性角度看区块链流动性发展

CECBC

Kubernetes手记(12)- StatefulSet 控制器

雪雷

k8s 6月日更

云上 ARM 实例应用优化?现在带你读懂它!

亚马逊云科技 (Amazon Web Services)

👑【Hystrix技术专题】原理和特性介绍

码界西柚

Hystrix spring-cloud 熔断器 6月日更

负载均衡算法之一 - 以 Golang 方式

hedzr

load-balancing weighted round-robin consistent-hashing

基于WebRTC的1对1通话实战(一)环境搭建

IT酷盖

音视频 WebRTC

夯实区块链产业发展根基是当务之急 标准体系、知识产权是国际竞争角力之焦点

CECBC

CSS技巧 | 优雅的处理文本溢出截断

devpoint

CSS 6月日更

Python分类预测模型

Qien Z.

Python 预测模型 6月日更

Flask-Limiter详细使用说明

行者AI

flask

别闹,那个在加密世界拿着长枪的库币

猫Buboo

区块链 区块链+ 加密资产

阿里P8工作10年,离职时发现只剩这份《Java架构速成》笔记了

Java架构师迁哥

发布60分钟!霸榜Github的阿里面试指导小册,啃透涨薪10k

Java架构师迁哥

企业如何成功应用机器学习?看这四点就够了!

亚马逊云科技 (Amazon Web Services)

网易云信大规模聊天室系统架构解析

网易云信

聊天室 IM

智慧新发展:打造更富动感的智慧园区3D可视化决方案!

一只数据鲸鱼

数据可视化 智慧城市 智慧园区 三维可视化

从金融街往事到全场景智慧金融未来

白洞计划

百度的云图丹青

脑极体

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