Maven
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理
使用Maven便于解决jar包冲突及依赖的问题
Maven工程目录结构约束
- 项目名
- src【书写源代码】
- main【书写主程序代码】
- java【书写java源代码】
- resources【书写配置文件代码】
- test【书写测试代码】
- java【书写测试代码】
- pom.xml【书写Maven配置】
Maven三套相互独立的生命周期
- clean lifecycle 在进行真正的构建之前进行一些清理工作
- default lifecycle 构建的核心部分,编译、测试、打包、安装、部署等
- site lifecycle 生成项目报告,站点,发布站点
插件和目标
- Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成
- 每个插件都能实现多个功能,每个功能就是一个插件目标
- Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务
例如:compile就是插件maven-compile-plugin的一个功能;pre-dean是插件
maven-clean-plugin的一个目标
Maven的仓库
- 仓库分类
- 本地仓库:为当前计算机提供maven服务
- 远程仓库:为其他计算机提供maven服务
- 私服:架设在当前的局域网环境下,为当前局域网范围内的所有maven工作服务
- 中央仓库:架设在Internet上,为全世界所有maven工程服务
- 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求
- 仓库中的文件类型【jar包】
- maven的插件
- 第三方框架或工具的jar包
- 自己研发的项目或模块
Maven的坐标
- 坐标由g-a-v组成
- groupid:公司或组织的域名倒序+当前项目名称
- artifactid:当前项目的模块名称
- version:当前模块的版本
- 注意
- g-a-v:本地仓库jar包位置
- a-v:jar包全名
jar包网址
- https://mvnrepository.com
- http://search.maven.org
依赖范围
依赖语法:<scope>
- compile【默认值】:在main、test、Tomcat【服务器】下均有效
- test:只能在test目录下有效
- provided:在main、test下均有效,Tomcat【服务器】无效
依赖传递性
- 路径最短者优先【就近原则】
- 先声明者优先
- (Maven可以自动解决jar包之间的依赖问题)
统一管理版本号
在一个pom文件里例如spring这个系列有很多的不同依赖。可以提取到properties中规定好版本号,因为在一个系列里要确保好版本号一致。然后在每个依赖里面的版本号填${...}即可
例如下图
继承
为什么需要继承
- 如子工程大部分共同使用jar包,可以提取父工程,使用【继承原理】在子工程中使用
- 父工程打包方式(<packing>)必须是 pom 方式
- pom全程:(Project Object Model 项目对象模型),将项目封装为对象模型,便于使用Maven管理【构建】项目
继承的方式一
- 在父工程导入之后,子工程可以直接删除相同的jar包。会自动导入父工程的
继承方式二
- 导入的jar包依赖最外面加上<dependencyManagement>标签
- 子工程在<parent>中 写入 <relativePath> 再写上父工程pom文件的相对路径
- 再写依赖,但不写版本号
聚合
在父工程的package/install操作会使得连同子工程一起,包括clean操作。
install操作会按照依赖的关系顺序安装
语法如下(父工程pom文件)
Mybatis