随着项目越来越多的使用Maven,但对Maven还是一知半解,所以打算写几篇文章,加深一下对Maven的了解。
1.什么是Maven
通俗的来讲,Maven就是管理项目的工具,用于构建项目。试想一个Java项目,每次构建都要经过编译,运行,打包,生成文档等步骤,当你的项目变得越来越庞大和复杂时,这将会是一件多么费时又费力的任务。有句话说的不错,成功的软件工程需要构建工具。构建工具的出现,则可以将这些繁杂的任务通过几个简单的命令来实现,这样,我们就可以有更多的时间花在编码或其他方面上了。
2. Maven特点
a. jar包管理
这或许是Maven最突出的特点了。以前在整合SSH的时候,最头疼的不是这几个框架的配置文件,而是jar包的管理。
(1)jar包缺少:编程时,经常出现这种情况,这边缺少common-logging,那边缺少mysql-connector-java,然后去网上找,找到各种版本的;
(2)jar包冲突:自己导入jar包,经常会出现版本不一致情况,如要进行单元测试,需要一个junit4的,找来了一个junit3版本的。有时候不清楚,还可以同时导入两个不同版本的jar包,而这种情况,以前的时候还是经常见到的;
(3)使用Maven后,我们只需在pom里配置一下,Maven就会帮我们自动下载对应的jar包,这样我们在团队中开发时,如果别人需要使用这个工程时,不用来回的拷贝这些jar包,直接拷贝一下pom文件即可;
b. 模块化管理
(1)所谓模块化,就是把复杂问题给分解开来,降低问题的复杂度,同时符合高内聚,低耦合的思想。另一个好处便是模块的重用,即模块化后,一些模块可以单独拿出来给不同的项目使用;
(2)模块划分:一般情况下, 有如下几种:
1. 基于水平方向的划分。把一个系统按照业务类型进行水平划分成多个模块,比如权限模块,用户管理模块,各种业务模块等;
2. 基于垂直方向的划分。如一个典型的Java Web项目,我们把它按照系统层次进行垂直划分:
- Dao层负责与数据库交互;
- Service层负责处理业务逻辑;
- Web层负责与浏览器交互;
3. 还有一种情况是基于系统的易变和不变性来划分,即把经常变动的代码和不经常改变的代码给分离开来;
(3)Maven的模块化是通过父项目与子项目的pom.xml来管理的,不管是父项目还是子项目,都各自有一个pom.xml,我们只需在里面配置好信息,Maven便会帮我们很轻松的管理项目;
c. 约定优于配置
这是很多项目采取的一个原则,虽然损失了一点灵活性,但却可以减少配置,降低复杂性,使我们的程序更优雅。如类的命名方式,测试用例的编写,数据库表的命名等。
d. 版本管理
Maven的版本定义是这样的:
<主版本>.<次版本>.<增量版本>
比如说1.2.3,主版本是1,次版本是2,增量版本是3。
主版本一般来说代表了项目的重大的架构变更,比如说Maven2和Maven 3,在架构上已经两样了。次版本一般代表了一些功能的增加或变化,但没有架构的变化,比如说Nexus 1.3较之于Nexus 1.2来说,增加了一系列新的或者改进的功能(仓库镜像支持,改进的仓库管理界面等等),但从大的架构上来说,1.3和1.2没什么区别。至于增量版本, 一般是一些小的bug解决,不会有重大的功能变化。