我对maven的比较深刻的认识也是在进入阿里之后,之前只是比较粗浅的了解。在阿里的工作模式,严格的项目流程让我真正意识到了maven在项目管理中所起到的如此重要的作用。如果你的项目管理流程比较简单,如果你不需要协作开发,那么你可能不能真正感受到maven的魅力。
在讲为什么使用maven之前我想说一下,antx,很多人知道ant,其实antx是阿里人自己搞的一套基于ant扩展的在某些方面类似于mavnen的工具,我们甚至有eclipse的antx插件,可想而知antx在阿里的项目管理中的重要地位。它有很多优秀之处:
1. 可以比较好的支持第二方库
2. 支持项目之间的依赖和继承
3. antx可以用jelly来写插件
4. car包的支持,这里简单介绍下car包:
car是war包的一种中间格式,在打包的时候包含vm页面,webx.xml,classes等资源,但是没有包含
WEB-INF/lib,一个war包能包含多个car 包,在war包打包的时候,能够把web工程依赖的car中的jar
包,包括传递依赖的jar包,一起合并到WEB-INF/lib下
5. auto config: auto-config.xml配置项目中需要被替换的资源
那我们为什么还需要引入maven呢?
先说一下Antx在存在哪些问题:
1. Antx第三方库的管理比较复杂,如果某个项目需要一个新的jar包或者新版本的jar包,则需要走一个严格申请流程,并且需要自己提交相关的jar包
2. Antx对jar包的版本控制,changelist等没有工具上的支持,导致很多项目都是1.0-SNAPSHOT从头用到尾,导致包版本比较不好控制。
3. Antx对SCM打包部署的支持不是很强。
4. Antx在于IDE的兼容性上存在问题,为了让eclipse支持antx,我们需要单独写一个antx插件来让eclipse支持antx,对于其他的一些比较好的IDE比如Intellij IDEA,是不支持antx的。
5. 现在IDE很多都有一键式DEBUG的功能,包括集成对应用服务器的支持,antx在这方面存在不足。
Maven能解决这些问题么,还有更好的优势么, 答案是YES
1. Maven的库是由开源组织维护,不需要我们再花精力去管第三方库,即使自己维护,也比较方便。
2. Maven对jar包的版本管理有工具上的支持,比如将Release版本和Snapshot版本区分开,有利于SCM管理。
3. Maven是标准,用过的人多,不需要额外培训。
4. Maven的plugin比较多,可以有更多功能,Maven现有体系比较开放,采用的技术相对比较通用和成熟,plugin的机制也可以便于我们扩展更多功能。
5. Maven的库下载是即用即下,不需要实现全部down下来。Maven的插件也是自动升级,可以方便的
我们扩展新功能。
6. 可以很方便的与eclipse, IDEA这样的主流的IDE集成
7. 仓库管理器:它的出现有两个目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件(第二方库)的地方。
8. 版本管理功能,这里的版本管理不是指第三方库的版本管理,而是项目的版本管理
9. 站点功能:它的出现让我们可以对项目的状态一目了然,可以自动的把项目的状态和各种报表以站点的形式发布到内部网或者外部网,可以随时随地查看项目状态。有很多中报表可以选择,包括,doc生成,代码规范的检查,自动bug检查,单元测试报表,单元测试的代码覆盖率报表
在后面的文章我会一一描述是如何在项目中使用和配置maven的各种实用的功能。