Maven 3测试版指南
在短短六年多的时间里,Apache Maven已经成为项目构建和报告管理方面最令人羡慕的工具之一。自Maven 2发布以来,已经过去了五年,现在Maven提交者发布了该软件的下一个里程碑式的版本。
在极短的时间内实现了令人难以置信的改进
没过多久,Maven就成为计算机工程领域最受尊敬和最受欢迎的工具之一。然而,随着Maven 3的推出,该产品只会继续改进,为那些需要这种额外计算能力的人提供服务。
随着时间的推移,整个系统变得越来越有趣,而这正是人们在浏览不同的软件选择时最感兴趣的地方。他们只是想要一些他们知道会增加他们可以完成的工作量的东西。
我们花了一些时间与Maven系列产品的有远见的创始人进行了交谈,我们从他那里直接得到了一些关于这些产品如何工作以及我们在未来可能期待什么样的更新的答案。信不信由你,只要和他坐下来,得到其中的一些答案,就能帮助我们更好地理解产品。
现在,关于Maven 3的讨论非常热烈,也应该如此。然而,我们想直接从它的创造者那里了解我们应该对哪些功能感到最兴奋。我们很高兴他能抽出时间与我们交谈并回顾他的创新产品。请听我们今天直接从创造者那里了解到的情况。
本周发布了Maven 3的第一个测试版,该版本在经历了7次公开的alphas之后,现在已经完成。Maven创始人、Sonatype首席技术官Jason van Zyl在本月初回答了DZone关于Maven 3的一些问题。以下是Maven 3的主要新功能类别。
插入式替换
Maven 1.x的用户可能还记得向Maven 2过渡时的颠簸,因为有几个根本性变化。Maven提交者也记得,他们投入了大量额外的工作来提供向后兼容性,使Maven 3在大多数情况下可以简单地替代Maven 2.x。
除了修复重复依赖和插件声明的问题外,你的POM不需要做任何改动。他们已经使命令行在2和3之间完全兼容。
Polyglot Maven
Polyglot Maven本身不是Maven 3的一部分,但它是van Zyl的公司Sonatype的一个工具,可以通过一个扩展点与Maven 3集成。扩展点是Maven 3的一项新功能,支持Tycho、Polyglot Maven和Maven Shell等工具。
从名字上你可能已经猜到了,Polyglot Maven支持动态语言,并试图为Groovy、Scala、Clojure、Ruby、Xtext和YAML提供一流的POM映射DSL(领域专用语言)支持。Polyglot Maven目前支持YAML。对于那些觉得原始XML格式很烦人的开发者来说,这是一个受欢迎的功能。如果你不喜欢,也没什么大不了的。
Van Zyl还说,这些DSL拥有资源库的互操作性和利用M2Eclipse的工具非常重要。
M2Eclipse
Maven 3在嵌入方面的变化使其在M2Eclipse(第一个用于Eclipse的Maven集成插件)内的工作更出色。现在,Maven 3在这个专门为Maven和Eclipse IDE构建的插件环境中运行时,性能能够提升200-300%。
M2Eclipse会在Maven POM中提供一些额外的XML元数据,M2Eclipse只识别这些元数据。这是实现高构建性能的一个特点。M2Eclipse还能自动下载所有的源,并为您的任何依赖项提供了单键创建新项目的功能。
Maven Shell
Maven Shell是另一个扩展点。它是将Maven嵌入到一个长期存在的壳进程中,缓存解析的POM,避免重复调用Maven时的启动成本,支持Maven Archetype集成,提供Nexus集成,包括一个内置帮助系统,并在Mac OS X上提供Growl支持。Van Zyl说,典型的案例将看到构建时间减少50%。
Maven Shell的1.0版本集成了类似于make的反应器模式,只构建修改过的模块。还支持项目工作流、Hudson、Tycho和Polyglot Maven。
其他改进
在Maven 3中,从事多模块或多POM项目的开发者不必在每个子模块中指定父级版本,而是可以添加无版本的父级元素。Maven 3还能看到哪些POM提供了哪些工件。在M2Eclipse中,您就可以取消选择某个贡献,而选择其他贡献。
这是通过Maven 3的执行计划和执行解耦实现的。Maven 3还包括扩展点(如上所述),它允许开发者与不同的扩展点挂钩,而不是通过子类化插件来改变插件的行为。例如,你可以用一个扩展点来改变web.xml通过WAR插件的处理方式。
Maven 3的源代码使用Google Guice进行依赖性注入,并使用Peaberry为Guice增加OSGi功能。整个依赖解析被Sonatype重构为一个名为Mercury的独立产品,Maven 3是它的一个客户端。信不信由你,Maven 3的代码库最终比Maven 2小1/3。
Maven 3.1
展望下一个版本,Maven 3.1将包括一个安全管理器,默认为settings.xml实现。Sonatype正在计划一个能与Nexus互动的实现。Maven 3.1还将引入POM混合器,使配置更易于维护和移植。混合器将有助于解决Maven 2.0中的问题,即共享配置只能通过继承来完成。POM混集是一种POM组合,它允许通过简单的引用将参数化的POM片段注入当前的POM中。