maven的支持者在提及maven的优点的时候总会提到这么一点,那就是maven是有生命周期的,而ant没有,你需要手工的编写target,然后编写每个target中的任务。
其实在我看来这个是纠缠概念,所谓的maven生命周期实际上是构建过程的生命周期。在ant中你需要手动的设定文件夹的结果,告诉ant哪个是源代码文件夹、哪个是测试代码文件夹,哪个是目标文件夹等等,因此对于使用ant每个项目都有不一样的代码。因为maven已经将项目的文件夹结构固定好了,不用程序员再指定,所以就可以将编译、打包、部署等这样一些过程都可以做成自动化的,也就是所谓的maven的生命周期。
其实,完全可以自定义ant的target来实现maven所谓的“生命周期”这个概念。
构建即俗称building(team-building也是一种构建),我的理解是在java开发中构建组要是指编译源代码、打包、部署、运行这样一个完整的过程,很多时候这个过程被IDE封装成了一个run按钮,当你写完代码按下run的时候,IDE会将所有的事情做完,对于coder,这一系列过程是透明的。
那又会有同学要问了,既然IDE已经可以做这些事情了,而且不用我操心,我干嘛需要maven呢?一方面,在持续集成和自动化构建过程中显然不可能去用IDE封装好的这一套,这里非得使用ant或者maven不可;另一方面,maven的最核心功能并不是这个而是包依赖的管理。
maven中默认的生命周期阶段可以参考《maven权威指南》chapter10 构建生命周期,我们会常用的有这么一些,你可以使用“mvn 生命周期的阶段名称”这样的命令来用maven自动构建:
- validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用
- compile 编译项目的源代码
- test-compile 编译测试源代码
- test 运行单元测试
- package 将编译好的代码打包成可发布的格式,如war、jar、ear等
- install 安装包到本地仓库,以备其他项目可用
- deploy 将本地包发布到远程仓库(一般是开发团队搭建的maven私服)
- site 生成项目文档和报道,和apache的一般网站风格很相似,这一点太强大了
maven的生命周期其实是“约定优于配置”这个思想的最好体现,觉得ant脚本难写的朋友可以感受一下maven的强大。
No Comments yet »