看完《maven实战》这本书和一些其他的关于maven构建的资料,很有必要总结为几篇博客,分享给大家,尽快的通过几篇博客了解构建以及有关构建的其他工具。
什么是maven?
有道一下你会发现maven有“内行”和“专家”的意思,也可以翻译成为“知识的积累”。和其本意一致,maven在计算机中就是抽象出一系列我们经常手动操作,用maven工具来代替人工执行这些重复的操作。专业上说是,maven是基于项目对象模型POM(Project-Object-Model),更适用于分模块开发系统,可以通过一小段描述信息来管理项目构建,报告和文档的软件管理工具。
简单的来说,以前我们普通的web项目,当需要依赖包的时候需要从其官网上下载对应的依赖jar包,需要我们手动的导入到lib文件夹下,而用maven构建项目,我们只需要写上jar包的名字和版本信息,maven会自动去网站上下载我们需要的jar。执行代码的时候需要我们去编译、运行单元测试、生成文档、打包、部署,而maven工具为我们封装了这些重复的工作。(如果感到头疼的话,看到这里就可以看下一篇啦。先大概了解就ok。)
什么是构建?
通俗的说,除了编写源代码之外的事情都是构建(build),比如我们从svn上上传源码和下载源码,之后进行编译,运行单元测试,之后手动打包一个war版本(可能连版本号都没有),之后交给运维人员,运维人员copy到容器下,然后启动容器,这就是构建。除了写源代码我们还有很大一部分的时间花在这重复的工作上面,于是有人用软件的方法让着一系列工作完全自动化,使软件构建如行自动流水线一样,只需要一个简单的命令,就把所有琐碎的工作自动完成,并很快得到结果。
maven作为一个构建工具,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务的实现;它可以跨平台,对外提供一致的接口,这一切足够使它成为优秀的、流行的构建工具。
maven仅仅是构建工具吗?
maven还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我自动下载构件。
maven可以自动解决了,jar的依赖增多,jar的版本不一致、版本冲突、依赖臃肿等问题。maven提供了一个优秀的解决方案,它通过一个坐标系统准确的定位每一个构建(,例如jar),通过一组坐标可以找到任何一个jar,轻松的解决了繁杂的依赖问题。
maven还能帮助我们管理原本分散在项目中的各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等。
maven还为全世界java开发者提供了一个免费的中央仓库,通过这些工具(nexus),我们还能对其进行快速的搜索。
为什么需要maven?
就像是你买电脑的时候不需要自己再买零件,自己手动去组装电脑,自己去测试硬件,系统和驱动安装等。有专人把这些都妥妥的做过了,省时省力。
IDE不是万能的,虽然优秀的IDE能够大大提高开发效率。但是IDE依赖于大量的手工操作,编译,测试,代码生成等工作都是独立的,很难一键完成所有的工作。手动就意味着低效,意味着容易出错。
很难再项目中统一所有IDE的配置,每个人都有自己的喜好,所以有时候会出现同一个项目在A的PC上可以正常运行,而在B的PC上则可能会失败。我们应该合理的利用IDE,而不是过多的依赖它。对于构建这样的任务,在IDE中一次次的点击鼠标是愚蠢的行为。maven是这方面的专家,而且主流IDE都集成了maven,我们可以在IDE中方便的运行maven执行构建。
maven与敏捷开发?(初学者可以简单了解)
maven可以实现敏捷开发的一些核心价值:
简单
maven拥有成熟、稳定的组件能简化构建系统的复杂度。
交流和反馈
与版本控制系统结合后,所有人都能执行最新的构建并快速的得到反馈。
测试驱动开发
当所有产品都需要测试用例覆盖的时候,maven有现成的支持成熟的测试框架,如junit和TestNG。
十分钟构建
这正是maven擅长的,只需要一些配置,之后用一条简单的命令就能让maven帮你清理、编译、测试、打包、部署,然后得到最终的产品。
持续集成(CI)
CI(Continuous integration)持久集成的前提是源码管理系统和构建系统,目前业界流行的CI服务器和jenkins都能很好的与maven集成。
富有信息的工作区
开发者能够快速的了解项目动态,可以使用maven发布的项目报告站点,并配置你需要的项目报告,如测试用例报告,帮你把信息推送到开发者眼前。
Ant和maven?(如果您不了解ant可以直接看下一篇,此为扩展知识节点,对于初学者无需看)
1、ant是过程化的,我们必须明确告诉ant做什么,什么时候做。告诉他去编译、然后复制压缩。
2、ant是没有生命周期的,你必须定义目标和目标之间的依赖,并手工为每个目标附上一个任务序列。
而maven和正是相反的,接下来在使用中了解maven与ant的不同,下一篇maven的安装和配置。