当前位置: 首页 > news >正文

Infoq专访:Maven中文用户组创始人许晓斌

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主要是以下三个因素:

  • Maven 提倡约定优于配置,例如目录结构的约定,很多习惯高度自定义的用户受不了,于是当然就排斥。其实约定有很多好处,例如当你从一个项目转到另外一个项目的时候,你不需要学习另外一套结构。
  • Maven 的学习曲线陡峭,一些人花了时间去学习,但没体验到快乐就学不下去了,因此完善的文档很重要。
  • 与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私服。

 

你 是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven——这一Java社区事实标准的项目管理工具, 能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等超酷的特性。已经有无数的开源项目使用它 来构建项目,促进团队交流。每天都由数以万计的开发者在访问中央仓库以获取他们需要的依赖。 由国内的Maven权威亲自执笔,《Maven实战》告诉你Maven的本质是什么,深入阐述Maven的依赖管理、仓库、生命周期、插件等核心概 念。你还能看到实际的案例演变,以及诸如多模块组织、建立Nexus私服、使用Hudson进行持续集成等企业开发的最佳实践。

 

本书配套资源:http://www.juvenxu.com/mvn-in-action/

Chinapub预订:http://www.china-pub.com/197177

Javaeye连载:http://www.iteye.com/wiki/hzbook/2872-Maven-in-action

Infoq迷你书:http://www.infoq.com/cn/minibooks/maven-in-action

相关文章:

  • 《源码中国:全球IT外包新原点》成书始末(BY高博)
  • 《深入理解计算机系统》最新版团购价低至6.0折
  • 做IT,应该人手一册的书——CSAPP
  • MySQL技术内幕:InnoDB存储引擎
  • 《企业文化地图》出版揭示人民企业集团等沪上近20家行业领袖成功秘笈
  • Grace Hopper:编译语言之母、千年虫制造者、世界第三位程序员(COBOL语言创始人)、海军少将
  • Grace Hopper:编译语言之母/千年虫制造者/世界第三位程序员/COBOL语言创始人/海军少将...
  • 《深入理解计算机系统》英文版6.5折预定!
  • 迅速步入jQuery的殿堂
  • 《jQuery权威指南》
  • 《人月神话》作者Frederick P. Brooks, Jr.大师论设计原本
  • 《企业文化地图》首发仪式圆满落幕
  • 《人月神话》作者Brooks最新力作《设计原本》前500册65折首发,英文版同步发售!
  • 《人月神话》作者Brooks最新力作《设计原本》前500册65折首发,英文版同步发售!...
  • 2011年第1期华章新书书讯:设计原本、深入理解计算机系统、jQuery权威指南
  • (三)从jvm层面了解线程的启动和停止
  • 2018一半小结一波
  • Debian下无root权限使用Python访问Oracle
  • ES6之路之模块详解
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • sessionStorage和localStorage
  • ViewService——一种保证客户端与服务端同步的方法
  • 从PHP迁移至Golang - 基础篇
  • 给新手的新浪微博 SDK 集成教程【一】
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 异步
  • ###C语言程序设计-----C语言学习(3)#
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (javascript)再说document.body.scrollTop的使用问题
  • (二)学习JVM —— 垃圾回收机制
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)大型网站架构演变和知识体系
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 版本不支持的问题
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net 托管代码与非托管代码
  • .NET/C# 使窗口永不获得焦点
  • .Net7 环境安装配置
  • .NET多线程执行函数
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /etc/skel 目录作用
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [Angular] 笔记 21:@ViewChild
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [c]扫雷
  • [C++随笔录] 红黑树
  • [echarts] y轴不显示0
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件