采访:Maven 贡献者、《Maven 实战》作者许晓斌

阅读数:5404 2010 年 11 月 5 日

话题:Java敏捷DevOps语言 & 开发文化 & 方法

Maven 是 Java 世界中一款历久弥新的构建工具,很多耳熟能详的开源项目都是基于 Maven 来构建的。Maven 3 刚推出不久,InfoQ 有幸采访到国内唯一的 Sonotype(Maven 背后的公司)员工许晓斌先生,请他谈谈关于 Maven 3 以及他即将出版的新书《Maven 实战》。

1. 首先,请您介绍你自己,从什么时候开始你从事 Maven 的推广工作,以及你现在在做些有什么有趣的事情呢?

我从 07 年开始接触 Maven,慢慢学习并在实际项目中推广使用,然后慢慢喜欢上了这个技术。1 年之后我开始编写Maven 中文博客并翻译《Maven 权威指南》,并且维护了一个Google Group,我想这些事情对于 Maven 在国内的推广起到了一定的作用。也正是由于这些工作的关系,我有机会熟悉 Maven 的方方面面,并加入了 Sonatype —— Maven 之父 Jason Van Zyl 创建的公司。

目前我主要做两方面的工作,其一是维护Maven 中央库Sonatype OSS 仓库托管服务,该服务为开源项目提供免费的 Maven 仓库并帮助他们同步自己的构件至中央仓库。目前有超过 600 个项目在使用该服务,包括知名的 JUnit、TestNG、Ehcache 等等。除此之外我也参与Nexus的开发,开源的、商业的都有。

2. Maven 3 刚刚推出不久,据说这个新版本在性能上有很大的提高。相比较以前的版本,你觉得最大的变化、最重要的新特性是哪些呢?

Maven 3 发布的第一时间我就写了篇博客进行介绍,其实从性能上来说,抛开并行构建不谈,用户不会感受到很明显的提高,这是因为 Maven 本质上是将构建工作给其他工具来做的,例如编译用 javac,测试用 JUnit,因此给 Maven 的改进余地不多。使用 Guice 代替 Plexus 从一定程度上能改进性能,但不是很明显。我个人认为 Maven 3 最重要的改进是清理,包括代码清理和不良特性的清理,例如在 Maven 3 中,你使用插件不声明版本不会引入快照,而 Maven 2 就因为快照插件的问题被很多人诟病。此外,Maven 3 的并行构建特性也让人眼前一亮,只要模块组织合理,多个模块能够得以同时构建,充分利用多核资源。

3. 在今年 2 月份,InfoQ有篇新闻是关于 Maven 3 即将采用 Guice 来作为新的 DI 层,请问这在 Maven 3 里面实现的如何?这对那些采用 Maven 的开发者来说,有着什么样的好处呢?

采用 Guice 作为 DI 容器最大好处在于标准化,Maven 之前使用的 Plexus 历史也很久,但发展得很差,文档也很缺乏,转到 Guice 后,由于大家更熟悉,就可以吸引更多的贡献者。Maven 团队也不再需要花时间去维护,有了问题,可以得到 Guice 社区的帮助。

Maven 3 在采用 Guice 的同时还必须支持 Plexus 风格 DI 标注或 XML 配置,以兼容现有的数以百计的 Maven 插件。为此 Maven 团队基于 Guice 2.0 所支持的自定义注入器,开发了一个中间层模块,该模块包含一个匹配器来识别你的标注配置是 Plexus 风格还是 Guice 支持的 JSR300 风格,如果是 Plexus 风格则再应用额外的集成逻辑。实现的细节在这两篇博客中有介绍:The Guice/Plexus Bridge and Custom Bean InjectionCreate a Guice Bean Extension Layer

4. 在 InfoQ 的这篇关于 Maven 3 的新闻里,出现了很多开发者对于 Maven 的评价,可谓毁誉参半。作为 Maven 的推广者,你怎么来评价这样争论的存在呢?

关于 Maven 的争论从来没有休止过,类似的争论还可以找到很多。但有目共睹的是,越来越多的开源项目在使用 Maven 作为他们的构建工具。我想那些人反对 Maven 主要是以下三个个因素:

  1. Maven 提倡约定优于配置,例如目录结构的约定,很多习惯高度自定义的用户受不了,于是当然就排斥。其实约定有很多好处,例如当你从一个项目转到另外一个项目的时候,你不需要学习另外一套结构。
  2. Maven 的学习曲线陡峭,一些人花了时间去学习,但没体验到快乐就学不下去了,因此完善的文档很重要。
  3. 与 IDE 的集成,这方面 m2eclipse 的质量确实比不过其他集成如 Ant,问题也有一些,但这些都在改善。IDEA 对 Maven 的集成就相当不错。

争论还会继续,只要反对者能提出合理的需求,那就是 Maven 改进的空间。

5. 谈一谈你编写的即将出版的那本新书吧,名字叫《Maven 实战》?为什么我需要这样一本新的 Maven 书呢?

由于种种原因,我翻译的《Maven 权威指南》没有能够在国内出版,这是一个遗憾,很多人告诉我他们自己打印了那本书看,这让我很感动。我很希望国内能有一本印刷上市的关于 Maven 的书,这是我写《Maven 实战》的最原始动机,后来我发现借助这个机会,我能将书写得更接近国人,包括语言的组织,以及内容的安排。例如在《Maven 实战》一书中,我介绍了使用 Maven 进行自动化部署,以及结合 Hudson 进行持续集成等内容,这些内容都是我实际体会到大家迫切需要的。前面说过,Maven 的学习曲线比较陡峭,这是他的天生问题,弥补的办法就是提供完善的文档,对于初学者来说,这样一本书无疑能帮他们少走弯路,节省时间。

6. 请您给那些不甚熟悉 Maven 的开发者们一点建议,怎样才能又快又好的掌握 Maven 呢?

首先不要排斥它,很多人因为 Maven 有很多约定而受不了,其实 Maven 这样做能帮助你更规范的管理项目。其次,如果不要太依赖于 IDE,IDE 能做很多事,但在自动化构建以及持续集成这些方面他不擅长,试着多用用命令行,熟悉 Maven 命令的同时,也能更深刻地体会一些 Maven 的概念。还有要耐下心来读读文档,你买我的书看当然最好,想省点可以看《Maven 权威指南》。最后就是实践啦,可以看看开源项目怎么用 Maven 的,然后在实际的项目中尝试,并使用 Nexus 建立自己的 Maven 私服。