Maven 3的10大新特性详解

参考

http://tech.it168.com/a2010/1108/1123/000001123274_all.shtml

http://www.developer.com/java/article.php/3908561/article.htm

 

 

6年了,我们终于等来了Maven 3,Maven 2虽然达到了一定的高度达,但它有两个死穴,一是难以扩展,二是它的代码难以理解,在Maven 3中,许多功能都进行了改造,消灭了Maven 2一直被人诟病的许多问题,在这篇文章中,我将介绍Maven 3的10大新特性。

  1、向后兼容

  Maven创始人,Sonatype公司的CTO Jason van Zyl表示“Maven 3是为用户构建的”,很明显,他的意思是Maven 3.0将会全面取代Maven 2.x,Maven 3开发人员尽了最大努力,确保Maven 2.x用户顺利过渡到Maven 3.0,如果出现重复依赖,插件声明或未指定插件版本号,Maven 3.0将会发出警告,这里我强烈建议你在POM中修复这些问题,因为Maven 3的未来版本可能不会支持生成畸形的项目。我已经尝试将我的多模块项目移植到Maven 3,同样,我收到了上述的警告,但我并没有遇到任何问题或生成时错误,Maven 3.0是可以兼容Maven 2.x的。

  2、性能改善

  我迁移到Maven 3最重要的一个原因是它的速度,更好的磁盘I/O,网络I/O,CPU利用率和更低的内存消耗,经过优化的Maven 3比Maven 2.x快50-400%,更快的生成速度显著提高了开发人员的生产力,我用Maven 3运行我的项目用时不到2分钟,而此前在Maven 2.x上需要耗时3分钟,值得注意的是我并没有开启并行生成功能,凭这一点,你就应该尽快去下载Maven 3亲自试一试。

  3、自动指定父版本

  在Maven 2中,你必须在子模块中指定父版本,当你在新版本上开发时,这是一个维护问题,Maven 3.1将会消除在子模块上指定父版本的需要。

  4、并行生成

  Maven 3引入了并行生成功能,它可以分析你的项目依赖图,允许你并行生成调度模块,使用下面的命令开启项目的并行生成功能。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> mvn - T 2 clean install mvn - T 2C clean install

  第一个参数(-T 2)表示使用两个线程并行生成项目,第二个参数(-T 2C)表示每个处理器核心上使用两个线程生成项目,借助并行生成功能,可以让生成速度提升20-50%,但目前并行生成还处于实验阶段,将来不排除发生变化的可能性,因此我建议你现在不要在生产系统中使用它。

 

  5、更好的错误和完整性报告

  Maven 3改善了错误报告,它会在错误报告中提供指向Maven Wiki页面的链接,这样你可以查看更全面的错误描述和可能的原因,如图1所示,例如,当我未指定子模块的父版本时,运行子模块将会获得一条错误消息。注意:在Maven 3.1中将不再需要为子模块指定父POM版本号。

六年等一回 Maven 3的10大新特性详解
▲图1 Maven 3.0错误报告

  6、插件扩展点

  在Maven 3中,你可以挂上不同的扩展点以便修改插件行为,在Maven 2中你只能直接扩展插件,这个功能是Maven开发团队从Eclipse借来的理念,例如,你可以定义一个扩展点修改web.xml由WAR插件来处理。

  7、Mixin

  Mixin允许你使用参数化的POM片段来组成POM,而不是继承,但这个功能需要等到Maven 3.1发布才能使用,这些Mixin将被部署到仓库,然后使用标准的坐标进行引用,例如,如果你想使用我的项目的发布过程,在Maven 2时代,你必须继承我的项目的Maven POM,因为Mixin是由插件和配置组成的,它们是可以参数化的,你可以用它们组成你的POM。

  8、Maven Shell

  Maven Shell是Maven的命令行接口,它可以提高你的生成速度,因为它可以缓存解析过的POM,避免重复调用Maven的启动成本,它也支持和Maven Archetype集成,并提供Nexus整合,它包括了一个内置的帮助系统,在Mac OS X上,它提供了Growl支持,Maven Shell不属于Maven发行包的一部分,需要单独从这里下载。

  在操作系统命令提示符后输入mvnsh即可启动Maven Shell,输入help可以查看Maven Shell支持的所有功能,如图2所示。

六年等一回 Maven 3的10大新特性详解
▲图2 Maven Shell功能 

 

  9、多语言生成

  Polyglot Maven是Maven 3非常有特色的一项功能,它允许你以非XML格式编写POM文件,Maven内核提供了一个底层DSL访问Maven内部,你可以用你熟悉的语言编写POM文件,目前支持的语言包括Groovy,Ruby,Scale,Clojure,YAML等,Polyglot Maven希望推动不喜欢XML的人使用Maven。

  Polyglot Maven未捆绑在Maven 3中,需要单独从这里下载,它包括一个叫做translator的工具,这个工具可以将你的XML POM转换成Groovy,Scala或YAML格式的POM,例如,使用下面的命令可以将一个XML POM转换成Scala POM。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> translate pom.xml pom.scala

  因此pom.xml

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> < project xmlns = " http://maven.apache.org/POM/4.0.0 " xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation = " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd " target = newFrame >
< modelVersion > 4.0 . 0 </ modelVersion >
< groupId > com.shekhar </ groupId >
< artifactId > polygot - maven - test </ artifactId >
< version > 1.0 - SNAPSHOT </ version >
< packaging > jar </ packaging >
< name > polygot - maven - test </ name >
< url > http: // maven.apache.org </ url >
< properties >< project.build.sourceEncoding > UTF - 8 </ project.build.sourceEncoding ></ properties >
< dependencies >< dependency >
< groupId > junit </ groupId >
< artifactId > junit </ artifactId >
< version > 3.8 . 1 </ version >
< scope > test </ scope >
</ dependency >
</ dependencies >
</ project >

 

  转换成Scala格式就是

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> project {
m
=> m.artifactId = " polygot-maven-test "
m.dependency
{
d
=> d.artifactId = " junit "
d.groupId
= " junit "
d.optional
= false
d.scope
= " test "
d._type
= " jar "
d.version
= " 3.8.1 "
}
m.groupId
= " com.shekhar "
m.modelVersion
= " 4.0.0 "
m.name
= " polygot-maven-test "
m.packaging
= " jar "
m.properties
+= ( " project.build.sourceEncoding " -> " UTF-8 " )
m.url
= " http://maven.apache.org " m.version = " 1.0-SNAPSHOT " }

  10、M2Eclipse

  M2Eclipse让Maven可以和Eclipse集成,M2Eclipse目前最新版本是0.10.0,它已经用Maven 3的嵌入式API进行了重写,M2Eclipse的性能得到了明显提升(根据该项目的网站描述,大约提升了200-500%),因为M2Eclipse在Maven POM中提供了额外的XML元数据,它们只能由M2Eclipse识别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值