项目管理利器 maven
maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
- setting.xml 主要用于配置 maven 的yu运行环境等一系列通用的属性,是全局级别的配置文件
- pom.xml 主要描述了项目的 maven 坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件
常见命令 mvn-
- v 查看 maven 版本
- compile 编译
- test 测试
- package 打包
- clean 删除target【maven生成的文件】
- install 将jar包安装到本地仓库中
- 自动构建项目-创建目录的两种方式
archetype:generate :按照提示进行选择
archetype:generate -DgroupId=组织名
-DartifactId=项目名-模块名【当前maven项目在组织中的唯一标识】
-Dversion=版本号
-Dpackage=包名
maven 中的坐标和仓库
-
坐标
通过 groupId 、artifactId、version 定位 -
仓库
本地仓库和远程仓库:本地仓库中找不到需要的构件则去 maven 的全球中央仓库中查找,查找到后会下载到本地仓库供使用,若远程中央仓库也找不到就会报错 -
镜像仓库
提供和 maven 中央仓库一样的功能,setting.xml 中配置mirror -
更改仓库位置
maven 从远程仓库下载的构件默认存放在当前用户目录的 .m2/repository 目录当中的,若要修改,则修改settings.xml中的<localRepository>本地仓库路径</localRepository> 标签内的本地仓库路径为新创建的文件路径。
完整的项目构建过程
清理、编译、测试、打包、集成测试、验证、部署
maven 生命周期
clean 清理项目
1. pre-clean 执行清理前的工作
2. clean 清理上一次构建生成的文件
3. post-clean 执行清理后的文件
default 构建项目【最核心】
compile、test、package、install(安装到本地仓库)
site 生成项目站点【根据POM中的信息自动生成一个站点】
pre-site 生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上
pom.xml 常用元素
pom.xml 是maven项目的核心管理文件,用于项目描述、组织管理、 依赖管理、构建信息的管理。
//模型版本,指定了当前pom的版本
<modelVersion>4.0.0</modelVersion>
<!--坐标信息-->
//定义当前 maven 属于哪一个实际的项目,maven 项目体现的是模块化的概念,一个实际的项目会被划分为很多的模块【域名反写+项目名】
<groupId>com.baidu</groupId>
//模块标识【项目名+模块名】
<artifactId>loan_manage</artifactId>
//当前项目版本号 大版本号.分支版本号.小版本号
-SNAPSHOT(快照版本)
-alpha(内测版)
-beta(公测版)
-Releage(稳定版)
-GA(正式发布
<version>0.0.1-SNAPSHOT</version>
//打包的机制 默认是jar
<packaging>jar</packaging>
//项目的描述名称, Maven产生的文档时候使用
<name>loan_manage</name>
//项目主页的URL, Maven产生的文档用
<!--<url>http://xxxxxx</url>-->
//项目的详细描述, Maven 产生的文档用。
<description>Spring Boot project</description>
//开发人员信息
<developers></developers>>
//许可证信息
<licenses></licenses>
//组织信息
<organization></organization>
//依赖列表
<dependencies>
//依赖项
<dependency>
//坐标信息
<groupId>org.submail.ecf</groupId>
<artifactId>org.apache.httpcomponents.httpclient</artifactId>
<version>4.3.5</version>
//设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似
<optional>false</optional>
//maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。
//scope包含如下的取值:compile(编译范围,默认 编译、测试、运行都有效)、provided(已提供范围 测试和编译有效)、runtime(运行时范围 测试和运行时有效 )、test(仅在测试范围)、system(系统范围 测试和编译有效 与本地系统相关联,可移植性差)
<scope>test</scope>
//屏蔽依赖关系。【该标签下可屏蔽多个依赖】 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 ;再比如A依赖B,B依赖C,C对于A来说就是传递依赖,如果A不想依赖C就可以使用这个标签
<exclusions>
<exclusion>
<groupId>C_groupId</groupId>
<artifactId>C_artifactId</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
//继承-自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖
(必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过
group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息。 -->
<dependencyManagement>
<dependencies>
<!-- 参见dependencies/dependency元素 -->
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<build>
//插件列表
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
//父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。
坐标包括group ID,artifact ID和 version。
<parent>
//被继承的父项目的全球唯一标识符
<groupId>org.springframework.boot</groupId>
//被继承的父项目的构件标识符
<artifactId>spring-boot-starter-parent</artifactId>
//被继承的父项目的版本
<version>1.5.6.RELEASE</version>
//父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。
Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),
然后在本地仓库,最后在远程仓库寻找父项目的pom。
<relativePath/> <!-- lookup parent from repository -->
</parent>
依赖传递
比如A依赖B,B依赖C,C对于A来说就是传递依赖,A会同时依赖B&C
依赖冲突
A和B依赖了一个构件的不同版本
1. 短路优先:优先解析路径短的版本
A->B->C->X(jar)
A->D->X(jar) 【优先】
2. 先声明优先:如果路径长度相同,则谁先声明,先解析谁
声明指 dependency 标签先后顺序
聚合和继承
-
聚合:将多个项目 install,将其安装到本地仓库中,必须对其依次进行 install 命令,maven 中有一种方式,可以将其放到一起运行,叫聚合。
新建项目->修改pom.xml中的packageing标签jar为pom->新增//模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 <modules> <modules>A子项目相对路径</modules> <modules>B子项目相对路径</modules> <modules>C子项目相对路径</modules> </modules>
->clean install 会进行三次构建 依次生成A、B、C三个jar并将其安装到本地仓库中
-
继承
将不同子项目中相同的配置提取到一个公共的父项目中
父:dependencyManagement 标签
子:parent 标签
关于pom.xml文件中标签的详细说明可参考:
http://blog.csdn.net/u012152619/article/details/51485297
https://www.cnblogs.com/hafiz/p/5360195.html
网友评论