目录
Maven简介
Maven的作用
一、标准化的项目结构
二、标准化的构建流程
三、依赖管理机制
Maven仓库简介
Maven仓库的分类
Maven的安装和配置
Maven常用命令
Maven生命周期
Maven坐标
Maven坐标的组成
使用坐标导入jar包
坐标的依赖范围
Maven分模块开发
概述
分模块开发流程
Maven依赖管理
编辑
依赖传递
依赖冲突时的优先级
可选依赖
排除依赖
POM聚合
POM继承
聚合和继承的区别:
属性
POM文件引用属性
资源文件中引用属性
属性列表
Maven依赖-版本管理
Maven多环境配置与应用
Maven中的跳过测试
Maven中私服的使用
私服:Nexus下载
Nexus安装和启动
私服中的一些概念
私服仓库分类
本地仓库访问私服仓库
使用私服上传和下载资源
更改私服所应用的中央仓库
Maven是一个项目管理和构建的工具。它是基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,报告和文档。
Maven的官方网站:Maven官网
对象模型:
Maven是专门用于管理和构建Java项目的工具,主要功能有:
1.提供一套标准化的项目结构。
2.提供一套标准化的项目构建流程。
3.提供一套依赖管理机制。
详细说明如下:
我们知道,Java的集成开发环境有很多,例如IntelliJ IDEA ,Eclipse等等,这些集成开发环境中创建的项目结构都是不一样的。因此移植性并不好,不太通用。因此Maven提供了一套标准化的项目结构,所有集成开发环境使用maven构建的项目,项目结构都是一样的。
使用maven构建的项目结构如下图:
编译 => 测试 => 打包 => 发布。
Maven提供一套简单的命令来完成这一套流程。
如果项目模块很多,大大提高了效率。
个人认为,maven的依赖管理机制是maven的王炸,如果没有maven,我们需要使用jar包,就只能到苦苦网上到处查找,找到了没准版本还不对。如果使用maven,就只需要写坐标就可以导入想要的jar包等依赖,自动引入,无需亲自下载。
管理机制说明:
1. 依赖管理机制就是管理你项目所依赖的第三方资源,如jar包这样。
2. 只需要通过坐标配置就可以导入各种依赖(jar包等...)。
3. Maven使用标准的坐标配置来管理各种依赖。
如上所有,maven只需要导入坐标就能导入jar包等依赖。这些jar包从何而来?
·就从Maven仓库中来。
Maven仓库是什么?
·简单来说就是存放各种jar的文件夹。
Maven仓库有多种,这些仓库都可以存一些我们需要的依赖。但是有区别。
分为:本地仓库、中央仓库,远程仓库
说明:
本地仓库:自己电脑上的一个目录。
中央仓库:由Maven团队维护的全球唯一的仓库。
远程仓库:一般由公司团队搭建的仓库,也称为私服。
我们在使用坐标导入jar包等依赖时,先查找本地仓库,如果本地仓库没有,会去中央仓库下载对应jar包等依赖,但是中央仓库有位于国外,下载速度很慢,所以一般会配置国内的镜像源。
在此使用Maven v3.6.1:
1.Maven压缩包下载地址
如需别的版本,可以返回上层目录下载即可。
3.给bin目录配置环境变量。
4.配置本地仓库
到目录中,进入打开conf/setttings.xml,找到如图
5.配置远程仓库(私服)
因为中央仓库位于国外,下载速度堪忧,因此我们需要设置国内的镜像,也就是我们国内的这些远程仓库,映射了中央仓库的所有jar包等依赖,我们从国内私服下载就会快很多。
到目录中,进入打开conf/setttings.xml,找到
想要用其他镜像,可以自行百度。
值得注意:如果不配置本地仓库,本地仓库默认为:不配置仓库。
仓库位置:C:\用户\用户名\.m2\repository。
编译:mvn compile
清理:mvn clean 清理target目录
打包:mvn package
测试:mvn test 测试test目录
安装:mvn install 将target的项目传到本地仓库
命令可以打开打开Powershell窗口测试,
Powershell窗口可以到Maven项目目录中 shift + 鼠标右键,选择Powershell窗口打开即可。
Maven对项目构建的生命周期划分为3套。
1.clean:清理工作。
2.default:核心工作,例如:编译,测试,打包,安装等等。
3.site:产生报告,发布站点等。
值得注意的是:在同一生命周期内,执行后边的命令,前边的所有命令会自动执行。
例如:我们执行打包安装命令,编译,测试,打包都会执行。
我们在Maven中,只要书写坐标,就可以导入jar包等依赖,那什么是坐标呢?
1.Maven中的坐标是资源的唯一标识。
2.使用坐标来定义项目或引入项目中需要的依赖。
1.在构建的maven项目中,打开pom.xml文件,编写
2.在
3.定义坐标元素:groupid,artifactid,version
4.刷新加载。
例如:导入spring-webmvc坐标
org.springframework
spring-webmvc
5.2.10.RELEASE
通过设置坐标的依赖范围(scope),设置对应jar包的有效范围,如测试环境有效,运行环境无效等等 ,默认值为:compile(编译)。
依赖范围:
例如:junit坐标,作用范围为仅测试。
junit
junit
4.13.2
test
我们没用到分模块开发时,会将某类东西都封装为包,例如表现层包,业务层包等等,放到一个模块中供自己调用,但在开发中,项目团队每个人负责的模块不同,每个人负责的模块中有时会存在一种情况:例如都需要使用pojo包,如果将pojo包放到自己的模块中的包中,其他的模块就访问不到了,所以,我们就可以将pojo抽离出来,供所有模块调用。这样的将原始模块按照功能拆分成若干子模块,方便模块间相互调用,接口共享,就是分模块开发。
1.创建maven模块,用于封装某功能
2.书写模块代码,将功能封装到该模块中。
3. 将书写好的模块安装到本地仓库,以供别的模块引用坐标可以成功运行。
团队开发需要将写好的模块放到公司私服中,供团队成员使用。
4.要应用功能模块的导入对应坐标即可。
依赖指的是当前项目需要的jar包,一个项目可以设置多个依赖。
具体格式:
对于依赖来说是具有传递性的。也就是说,例如:导入了依赖a,a中存在依赖b坐标,当我们也需要b依赖时,只要导入了依赖a,就可以使用依赖b,不需要再次导入。这就是依赖的传递性。
直接依赖:在项目中通过依赖坐标配置的依赖。
间接依赖:导入的依赖a,此依赖a中存在依赖b,依赖b就是间接依赖。
存在两个版本的依赖,以pox.xml中声明较为后面的为准。
路径优先:深度越浅,优先级越高:
如图:当上2度和下3度存在相同资源时,2度的深度较浅,优先级更高。
在导入依赖时设置optional,可以阻止依赖传递。也就是说:在我们的模块中,引用坐标时,书写了
标签为true,此坐标即为可选依赖,我们将模块提交到远程仓库,别人引用我们的模块时,就看不到我们设置为可选依赖的坐标。
导入某坐标时,不想要此坐标中的某依赖。可以选择排除。
例如:
聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合。
聚合工程:通常是一个不具有业务功能的"空"工程(有且只有一个pom.xml文件)。
作用:实现对所包含的模块进行同步构建。
当工程中某模块发生更新时,必须保障工程中与更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。
如图:左边的即为聚合工程
聚合工程的pom.xml文件书写步骤:
总结: 聚合工程开发:用一个工程管理多个工程,一个工程发生改动,依赖于这个工程的模块会随着改动。
概念:继承描述的是两个工程之间的关系,子工程可以继承父工程的配置信息,常见为依赖关系的继承。
使用:
例如:声明一个父工程,把常用的一套坐标写在父工程的pom.xml中,以后只要子工程也需要这一套坐标,不必重复导入坐标,继承父工程即可。
作用 :
1.简化配置
2.减少版本冲突
继承书写步骤:
配置子工程中配置可选的依赖:
也就是子工程不会直接继承到,需要的话,手写(不需要写版本),自动继承父类版本。
我们可以像在java中定义属性一样,声明了属性以后,就可以在其他地方使用,在POM.xml文件中,我们也可以定义属性,定义了属性后,我们就可以在pom文件或maven的资源文件中使用。
使用场景:
当我们许多依赖的版本需要统一管理时,也就是多个依赖需要版本相同,例如spring-webmvc,spring-test,spring-jdbc等等,他们的版本要求一致,我们就可以声明一个属性,给这个属性赋值,然后给他们引用即可,当版本需要修改时,我们只需要修改属性值即可。避免了某个漏改或改错的情况,导致版本冲突。
属性定义的步骤:
1.在POM.xml文件中定义属性,自定义标签为属性名。属性值为自定义标签包裹,
2.引用属性,使用符号 ${ 属性名 }
我们在pom文件中设置的属性,不仅在pom文件内部可以使用,还能在外部的资源文件中使用。
例如:在配置文件中引用属性步骤
${project.basedir}为内置属性。
我们在pom.xml文件中声明的为自定义列表,但是maven中的属性不仅仅只有这个,还有如下等属性可以引用。
我们在导入坐标时,可以看到有许多样式的版本。例如:
纯数字、SNAPSHOT(快照版)、RELEASE(发布版)等等
工程版本:
发布版本:
maven提供配置多种环境的设定,帮助开发者在使用过程中快速切换环境。
例如:在测试阶段使用测试阶段的务器,在开发阶段使用开发的环境。
多环境配置步骤:
1.定义多环境的配置
2.使用配置好的多环境
方式1:可以将想要使用的环境定义为默认环境,直接运行,就是使用定义为默认的环境。
方式2:使用命令:
mvn 操作指令 -P 环境定义时的ID,例如执行如上定义的环境:
mvn install -P pro_env
在执行指令时,不进行测试。
应用场景:
1.快速打包,不需要测试,打包更快。
2.功能更新中并且没有开发完毕,测试会报错,例如,就想先打个包。
跳过测试执行方式:
方式一:IDEA中的快捷键
方式二:命令方式
mvn 指令 -D skipTests
方式三:细粒度控制(配置插件)
私服是一台独立的服务器,用于解决团队中内部资源的资源共享与资源同步的问题。
下载地址:官网下载,选择自己对应系统下载。
1.下载好压缩包,解压后即使安装成功。
2.启动服务器:
到安装的目录中,找到bin目录,进入到bin目录的命令行界面。输入命令:
nexus.exe /run nexus
3.访问私服(nexus默认端口号为8081)
http://localhost:8081
4.访问成功后,看到右上角,点击登录,按要求操作即可。
5.可以自定义创建仓库
在私服中,其实就是存放着许多的仓库,供我们存储和提取资源。许多仓库的组成,就是仓库组,我们在进行资源的上传时,需要指定某个仓库,因为每个团队所使用的仓库不一样。但是我们向其中提取资源时,只需要访问仓库组即可获取,不需要精确到某个仓库。
过程:
当我们访问仓库组中的资源时,如果仓库组中不存在我们想要的资源,此时私服就会到设置好的中央仓库中下载,并返回给我们。然后将此资源进行存储。
本地仓库中需要的配置
到我们下载的maven的目录 /conf/settings.xml 打开文件进行配置。
配置1:配置访问私服需要的权限(账号密码)
仓库名称
用户名
密码
配置2:配置私服访问路径
仓库组名
*
仓库组URL地址
仓库组URL可以点击仓库组,显示的信息面板有显示。
在pom文件中设置上传和下载所使用的仓库。
仓库名称
仓库的URL地址
上传资源 (部署资源到私服)
方式一:IDEA中快捷键deploy
方式二:使用命令
mvn deploy
设置私服所使用的中央仓库,当访问的资源私服中不存在时,向设置好的中央仓库中获取后返回给我们。