maven介绍及环境搭建
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。maven官方网址:http://maven.apache.org,maven安装目录下包含了4个文件夹:bin,boot,conf,lib。
- bin目录包含了mvn的运行脚本
- boot目录包含了一个类加载器的框架
- conf是配置文件目录
- *lib目录下包含了maven用到的所有的类库,除了maven自身的类库,还包含了一些第三方的依赖的类库
maven常用的构建命令
- mvn -v : 查看maven版本
- mvn compile : 编译
- mvn test : 测试
- mvn package : 打包
- mvn clean: 删除target
- mvn install: 安装jar包到本地仓库中
maven自动建立目录骨架
- achetype:generate,按照提示进行选择
- achetype:generate -DgroupId=组织名,通常为公司网址的反写+项目名 -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码所存在的包名
maven中的坐标和仓库
在Maven中,任何依赖(jar包,tomcat等),或项目(自己打包的jar,war等)输出都可称为构件。每个构件都有自己的唯一标识(唯一坐标),由groupId,artifactId,和version等信息构成,由此,Maven就可以对构件进行版本控制,管理。maven的构件都存放在仓库中,仓库又分为: 本地仓库和远程仓库,当在本地仓库查找不到构件时,maven会通过在远程的中央仓库中查找。 maven的全球仓库地址的查找:在maven安装目录的lib目录下找到maven-model-builder.jar,在这里面,maven为我们提供了一个super pom,我们所配置的pom都是继承了这个pom的 ,这个pom中配置了一个repository,其中的url就是全球的中央仓库地址。中央仓库中包含了非常多的开源框架和项目。镜像仓库:我们有时候可能访问不到外网的仓库,所以我们需要访问国内的镜像仓库,这样更加稳健,在maven的conf文件夹下有一个settings.xml文件,它为我们提供了一个mirror标签的示例:
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
如何更改仓库位置:maven本地仓库的位置默认在电脑用户的.m2文件夹下,我们可以在电脑中自定义一个工作空间作为maven的本地仓库,然后在maven的settings.xml中找到localRepository标签,直接将这个本地仓库的路径复制到标签下就可以成功修改maven本地仓库的位置了。
maven的生命周期和插件
完整的项目构建过程包括:清理、编译、测试、打包、集成测试、验证、部署。
maven生命周期:
1.clean : 清理项目
(1)pre-clean,执行清理前的工作
(2)clean,清理上一次构建生成的所有文件
(3)post-clean,执行清理后的文件
2.default : 构建项目
compile、test、package、install
3.site : 生成项目站点
(1)pre-site,在生成项目站点前要完成的工作
(2)site,生成项目的站点文档
(3)post-site,在生成项目站点后要完成的工作
(3)site-deploy,发布生成的站点到服务器上
maven pom.xml解析
- pom.xml常用元素介绍
1.project,pom.xml的根元素,它包含了一些约束的信息
2.modelVersion,指定了当前pom的版本
3.groupId,主项目的标识,用于定义当前maven属于哪个实际的项目
4.artifactId,模块的标识,指定实际项目中的模块
5.version,当前项目的版本号,第一个数字表示大版本号,第二个数字表示分支版本号,第三个数字表示小版本号,snapshot快照,alpha内测,beta公测,Release稳定,GA正式发布
6.packaging,指定了maven项目的打包方式,默认是jar,还可以打包成war,zip,pom等类型
7.name,项目描述名
8.url,项目地址
9.description,项目描述
10.developers,开发人员信息
11.licenses,许可证信息
12.organizations,组织信息
13.dependencies,依赖列表
14.dependency,依赖项
15.type,依赖类型
16.scope,依赖范围
17.optional,设置依赖是否可选,默认是false,即子项目默认继承依赖,如果为true,子项目必须显式的引入该依赖
18.exclusion,排除依赖传递列表
19.dependencyManagement,依赖的管理,在该标签里可以声明依赖列表,但是依赖不会被运行,主要用于定义在父模块中,供子模块继承
20.build,为构建的行为提供相应的支持
21.plugins,插件的列表
22.plugin,插件
23.parent,通常用于在子模块中对于父模块pom的继承
24.modules,聚合运行多个的maven项目,可以指定多个module一起进行编译
25.module,模块 - maven依赖范围
项目开发时,如果要使用某个框架,就要将该框架的jar包引入到项目的classpath路径中,这样项目就能使用框架中封装好的方法,maven中为项目提供了三种classpath:1.编译,2.测试,3.运行。依赖范围就是用来控制依赖与三种classpath的关系的。在官方的文档中,依赖范围给定的值有6种:compile,provided,runtime,test,system,import,其默认值为compile,表示编译运行测试都有效,而provided表示在编译和测试时有效,runtime表示在测试和运行时有效,test表示只在测试时有效,system指定的范围与provided一样,但它与本机系统相关联,可移植性差,import表示导入的范围,它只使用在dependencyManagement中,表示从其它的pom中导入dependency的配置。 - maven依赖传递
- maven依赖冲突
1.短路优先
maven会优先解析路径短的依赖版本,比如有A->B->C->X(jar)和A->D->X(jar)两个依赖版本,会优先解析第二个版本
2.先声明者优先
如果路径长度相同,则谁先声明,先解析谁 - 聚合和继承