欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

Maven 3.0 正式发布

程序员文章站 2022-03-05 11:28:17
...

Maven 3.0 正式发布真是千呼万唤始出来,在经历了7个alpha、3个beta、以及3个RC版本之后,Maven 3.0正式版终于发布了。Maven团队在RC的过程中收到了许多反馈,待到反馈渐渐减少的时候,他们决定发布3.0正式版。我其实从alpha就已经开始使用Maven 3了,期间偶尔遇到了一些小问题,但总得来说Maven 3非常的稳定。Jason Van Zyl – Maven的创立者,他说过“在Maven 3中我们修复了超过1,000个无法在Maven 2中修复的bug,因此对于Maven 2用户来说,Maven 3其实完全可以健康的替换之前的版本”

读者可以从Apache Maven的官方网站下载 Maven 3:
http://maven.apache.org/download.html

我应该升级么?

答案是“YES”,如果你在使用Maven 2,犹豫着是否应该升级到Maven 3,担心着会遇到兼容性问题,那大可以打消这个顾虑,Maven 3自设计之初就一直考虑与Maven 2的兼容性,这不仅仅是指兼容Maven 2的核心,还包括大量的 org.apache.maven.plugins 与 org.codehaus.mojo 插件。虽然由于某些插件代码的特殊性,无法做到100%完全的兼容,但已经基本不会遇到问题了,感兴趣的读者可以看一下Maven 3与主要Maven插件的兼容性关系列表。Maven 3有超过500个的自动化集成测试来覆盖各种用例,有很多项目如Nexus,自alpha起就开始转到Maven 3构建项目,Maven 3表现得异常优秀。

插件解析机制改进

Maven 2常被人诟病的一点是它经常自动引入一些有问题的插件,导致构建的不稳定。例如用户在使用某一插件的时候没有声明版本(Maven允许你这么做,但不推荐),Maven 2会自动下载该插件的最新版本,而这个版本可能是发布版如2.0,也可能是快照版2.1-SNAPSHOT,更糟糕的是,不同的时间,插件的最新版本可能是不一样的,因此可能用户今天引入了2.0,构建没有问题,但一个月后引入了最新的2.1-SNAPSHOT,导致构建失败了。这种机制会破坏构建的可重现性,因此在Maven 3中,如果用户不指定插件版本,Maven只会引入最新的发布版本插件,这样相对降低了引入问题插件的可能性,同时Maven 3还会给用户发出警告,提醒用户指定插件版本。

并行构建

除了更可靠更稳定之外,Maven 3还致力于提高性能。这包括大量的代码重构,以及使用Guice替代Plexus作为IoC容器。除此之外,Maven 3还引入了并行构建(目前只是实验性质的特性),使用并行构建后,Maven 3能够分析项目模块之间的依赖关系,然后并行地构建那些项目之间没有依赖关系的模块。例如以下的命令就表示让Maven使用4个线程构建项目:

$ mvn -T 4 clean install

用户还可以基于CPU核的数量来告诉Maven使用多少个线程,例如下面的命令表示为每个核分配2个线程:

$ mvn -C 2 clean install

根据官方文档的描述和我实际的测试,并行构建可以提升20%-50%的构建速度。

Maven Shell 和 Polyglot Maven

这两者不是Maven 3的核心内容,它们是Sonatype基于Maven 3开发的扩展。

Maven Shell是一个命令行终端,它可以智能的帮助用户与Maven进行交互,它使用一个一直运行的JVM来缓存各种构建信息,因此如果用户反复构建一些Maven项目的话,速度能够得到很大的提升。

Polyglot Maven是一个能够帮助那些讨厌XML的Maven用户而开发的,它致力于支持各类动态语言和DSL,目前Polyglot Maven支持YAML,这意味着用户可以用YAML来编写POM。

其它改进和特性

Maven 3摒弃了一些Maven 2中的不良特性,例如单独的profiles.xml不再被支持,Maven 1格式的仓库不再被支持,RELEASE和LATEST的插件不再被支持,等等。读者可以查看完整的兼容性列表

Maven 3将所有站点相关的逻辑从核心移出,都转移到了Maven Site Plugin中,这样用户才可能使用Doxia之外的格式来生成站点。

Maven 3能够更好的支持各种内嵌环境如IDE和持续集成服务器,如m2eclipse、Hudson。

相关标签: maven