Maven的原理和使用
一、Maven能做什么
1、假设我们有10个项目,都需要引入spring core模块,那么需要十份重复的Spring Core.jar和commons-logging.jar
使用Maven:maven使用本地仓库存储的jar,所有项目都会公用仓库中的同一分jar
2、Spring Core.jar必须同时引入版本兼容的commons-log.jar,否则会报错
使用Maven:maven不需要关心这些问题,会自动引入Spring core.jar所需的兼容版本jar
3、如果一个项目里面有个100个jar,不知道那些jar是彼此关联的,那些是互相排斥的,当需要升级版本时,增加或删除一些jar,很容易出各种问题
使用Maven:maven升级jar,只需要把版本3.x改成4.x,他会自动解决那些问题
概括的说:Maven是一个项目管理和综合工具。Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。Maven增加可重复性并负责建立相关的业务。
二、Maven的安装和设置
1、安装之前,首先确定你已经安装了JDK
2、下载地址:http://maven.apache.org/download.cgi
3、将安装文件解压到你指定的目录中
4、配置环境变量,变量名M2_HOME,变量值为Maven的安装目录,修改path值,在变量值后面加上bin,例如:%M2_HOME%/bin
5、测试maven环境,执行命令:mvn -v
三、从Maven模板创建一个项目
1、整个项目的项目目录结构会自动创建
2、所有的源代码放在文件夹/src/main/java/,所有的单元测试代码放入:/src/test/java/
3、附加的一个标准的pom.xml被生成,这个Pom文件类似于Ant build.xml文件,它描述了整个项目的信息,一切“从目录结构”,项目的插件,项目依赖,如何构建这个项目等。
4、Maven各个目录的解释说明
5、pom的基本信息
6、pom的依赖关系
7、pom详解
a、添加插件
b、去除依赖
c、继承
d、聚合(通过一个大的项目来整合各个小的模块)
e、指定在Build时需要的资源文件(resource)
四、Maven的生命周期
1、clear:移除上一次构建生成的文件
2、compile:编辑项目的源代码
3、test:使用单元测试框架进行测试,测试代码不会被打包或者部署
4、package:接受编译好的代码,打包成可发布的格式
5、install:将包安装到maven本地仓库,供本地其他maven项目使用
6、deploy:将最终的包发布到远程仓库,供其他开发人员和maven项目使用。
7、site:生成项目的站点文档
五、Maven仓库
在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构建。
Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。
任何一个构件都有其唯一坐标,根据这个坐标可以定义其在仓库中的唯一路径,这就是Maven仓库的布局方式。
如:groupId=org.testing
artfactId=testing
version=5.8
生成路径:org/testing/testing/5.8/testing-5.8-jdk15.jar
六、Maven的依赖
1、依赖的传递性
一个复杂的项目会包含很多依赖,也有可能包含依赖其他构件的依赖。这个是Maven的强大特征之一,它支持了传递性依赖。
依赖原则:路径优先原则,第一声明原则。
解决依赖问题:
通过调整dependency的顺序来解决:那个依赖的顺讯在前面就依赖那个
自己添加一个denpendeny来解决:因为该路径是最小的
通过exclusions元素排除不想要的传递性依赖。
2、Version解释
snapshot版本表示不稳定,处于开发中的版本,即快照版本
release:表示趋于稳定,当前停止更新,可以用于发行的斑斑。
场景:协同开发时,如果A依赖B,由于B频繁更新,B应该使用SNAPSHOT来标识自己。
3、依赖范围Scope
compile(默认):编译范围的依赖,它在编译和打包的时候都会把该依赖打包进去
test:测试依赖范围,它在编译和打包的时候不会把该依赖打包进去
provided:在编译和测试范围有效,最后生成war包时不会打包进去
rumtime:运行时依赖,编译的时候不依赖
import:导入依赖范围
system:系统依赖范围