Maven-入门到进阶

目录

 

Maven简介

 Maven的作用

一、标准化的项目结构

二、标准化的构建流程

 三、依赖管理机制

Maven仓库简介

 Maven仓库的分类

 Maven的安装和配置

Maven常用命令

Maven生命周期

Maven坐标

Maven坐标的组成

使用坐标导入jar包

坐标的依赖范围

Maven分模块开发

概述

 分模块开发流程

Maven依赖管理

​编辑

依赖传递

依赖冲突时的优先级

 可选依赖

 排除依赖

POM聚合

POM继承

聚合和继承的区别:

属性

POM文件引用属性 

 资源文件中引用属性

 属性列表

 Maven依赖-版本管理

Maven多环境配置与应用

 Maven中的跳过测试

 Maven中私服的使用

 私服:Nexus下载

 Nexus安装和启动

 私服中的一些概念

私服仓库分类

 本地仓库访问私服仓库

 使用私服上传和下载资源

更改私服所应用的中央仓库


Maven简介

Maven是一个项目管理和构建的工具。它是基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,报告和文档。

Maven的官方网站:Maven官网

对象模型:

Maven-入门到进阶_第1张图片

 Maven的作用

 Maven是专门用于管理和构建Java项目的工具,主要功能有:

1.提供一套标准化的项目结构。

2.提供一套标准化的项目构建流程。

3.提供一套依赖管理机制。

详细说明如下:

一、标准化的项目结构

我们知道,Java的集成开发环境有很多,例如IntelliJ IDEA ,Eclipse等等,这些集成开发环境中创建的项目结构都是不一样的。因此移植性并不好,不太通用。因此Maven提供了一套标准化的项目结构,所有集成开发环境使用maven构建的项目,项目结构都是一样的。

使用maven构建的项目结构如下图:

Maven-入门到进阶_第2张图片

二、标准化的构建流程

编译 => 测试 => 打包 => 发布。

Maven提供一套简单的命令来完成这一套流程。
如果项目模块很多,大大提高了效率。

 三、依赖管理机制

个人认为,maven的依赖管理机制是maven的王炸,如果没有maven,我们需要使用jar包,就只能到苦苦网上到处查找,找到了没准版本还不对。如果使用maven,就只需要写坐标就可以导入想要的jar包等依赖,自动引入,无需亲自下载。 

 管理机制说明:

1.  依赖管理机制就是管理你项目所依赖的第三方资源,如jar包这样。

2. 只需要通过坐标配置就可以导入各种依赖(jar包等...)。

3. Maven使用标准的坐标配置来管理各种依赖。

Maven仓库简介

如上所有,maven只需要导入坐标就能导入jar包等依赖。这些jar包从何而来?

·就从Maven仓库中来。

Maven仓库是什么?

·简单来说就是存放各种jar的文件夹。

 Maven仓库的分类

Maven仓库有多种,这些仓库都可以存一些我们需要的依赖。但是有区别。

分为:本地仓库、中央仓库,远程仓库

 Maven-入门到进阶_第3张图片

 说明:

本地仓库:自己电脑上的一个目录。

中央仓库:由Maven团队维护的全球唯一的仓库。

远程仓库:一般由公司团队搭建的仓库,也称为私服。

我们在使用坐标导入jar包等依赖时,先查找本地仓库,如果本地仓库没有,会去中央仓库下载对应jar包等依赖,但是中央仓库有位于国外,下载速度很慢,所以一般会配置国内的镜像源。        

 Maven的安装和配置

在此使用Maven v3.6.1:

1.Maven压缩包下载地址

如需别的版本,可以返回上层目录下载即可。 

Maven-入门到进阶_第4张图片 2.解压,下载后解压后就算安装成功。

3.给bin目录配置环境变量。

4.配置本地仓库

到目录中,进入打开conf/setttings.xml,找到如图修改为自己创建的目录,用来存放以后导入的jar包等依赖。

5.配置远程仓库(私服)

因为中央仓库位于国外,下载速度堪忧,因此我们需要设置国内的镜像,也就是我们国内的这些远程仓库,映射了中央仓库的所有jar包等依赖,我们从国内私服下载就会快很多。

到目录中,进入打开conf/setttings.xml,找到标签内写入如下:

想要用其他镜像,可以自行百度。

Maven-入门到进阶_第5张图片

值得注意:如果不配置本地仓库,本地仓库默认为:不配置仓库。

仓库位置:C:\用户\用户名\.m2\repository

Maven常用命令

编译:mvn compile

清理:mvn clean    清理target目录

打包:mvn package

测试:mvn test    测试test目录

安装:mvn install  将target的项目传到本地仓库

命令可以打开打开Powershell窗口测试,

Powershell窗口可以到Maven项目目录中 shift + 鼠标右键,选择Powershell窗口打开即可。

Maven-入门到进阶_第6张图片

Maven生命周期

Maven对项目构建的生命周期划分为3套。

1.clean:清理工作。

2.default:核心工作,例如:编译,测试,打包,安装等等。

3.site:产生报告,发布站点等。

值得注意的是:在同一生命周期内,执行后边的命令,前边的所有命令会自动执行。

例如:我们执行打包安装命令,编译,测试,打包都会执行。

Maven坐标

 我们在Maven中,只要书写坐标,就可以导入jar包等依赖,那什么是坐标呢?

1.Maven中的坐标是资源的唯一标识。

2.使用坐标来定义项目或引入项目中需要的依赖。

Maven坐标的组成

  • groupId:定义当前Maven项目隶属组名。
  • artifactId:定义当前Maven项目名称。
  • version:定义当前项目版本号。

使用坐标导入jar包

1.在构建的maven项目中,打开pom.xml文件,编写标签。

2.在标签中使用引入坐标。

3.定义坐标元素:groupid,artifactid,version

4.刷新加载。

例如:导入spring-webmvc坐标


org.springframework
spring-webmvc
5.2.10.RELEASE

坐标的依赖范围

通过设置坐标的依赖范围(scope),设置对应jar包的有效范围,如测试环境有效,运行环境无效等等 ,默认值为:compile(编译)。

 依赖范围:

Maven-入门到进阶_第7张图片

 例如:junit坐标,作用范围为仅测试。


junit
junit
4.13.2
test

Maven分模块开发

概述

我们没用到分模块开发时,会将某类东西都封装为包,例如表现层包,业务层包等等,放到一个模块中供自己调用,但在开发中,项目团队每个人负责的模块不同,每个人负责的模块中有时会存在一种情况:例如都需要使用pojo包,如果将pojo包放到自己的模块中的包中,其他的模块就访问不到了,所以,我们就可以将pojo抽离出来,供所有模块调用。这样的将原始模块按照功能拆分成若干子模块,方便模块间相互调用,接口共享,就是分模块开发

Maven-入门到进阶_第8张图片

 分模块开发流程

1.创建maven模块,用于封装某功能

Maven-入门到进阶_第9张图片

 2.书写模块代码,将功能封装到该模块中。

3. 将书写好的模块安装到本地仓库,以供别的模块引用坐标可以成功运行。

 团队开发需要将写好的模块放到公司私服中,供团队成员使用。

4.要应用功能模块的导入对应坐标即可。

Maven依赖管理

依赖指的是当前项目需要的jar包,一个项目可以设置多个依赖。

具体格式:  

Maven-入门到进阶_第10张图片

依赖传递

对于依赖来说是具有传递性的。也就是说,例如:导入了依赖a,a中存在依赖b坐标,当我们也需要b依赖时,只要导入了依赖a,就可以使用依赖b,不需要再次导入。这就是依赖的传递性。

 直接依赖:在项目中通过依赖坐标配置的依赖。 

间接依赖:导入的依赖a,此依赖a中存在依赖b,依赖b就是间接依赖。

依赖冲突时的优先级

 存在两个版本的依赖,以pox.xml中声明较为后面的为准。

 路径优先:深度越浅优先级越高:

如图:当上2度和下3度存在相同资源时,2度的深度较浅,优先级更高。

Maven-入门到进阶_第11张图片

 可选依赖

在导入依赖时设置optional,可以阻止依赖传递。也就是说:在我们的模块中,引用坐标时,书写了标签为true,此坐标即为可选依赖,我们将模块提交到远程仓库,别人引用我们的模块时,就看不到我们设置为可选依赖的坐标。

Maven-入门到进阶_第12张图片

 排除依赖

导入某坐标时,不想要此坐标中的某依赖。可以选择排除。

 例如:书写导入的模块中排除其中的log4j和mybatis依赖。

Maven-入门到进阶_第13张图片

POM聚合

聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合。

聚合工程:通常是一个不具有业务功能的"空"工程(有且只有一个pom.xml文件)。

作用:实现对所包含的模块进行同步构建。

          当工程中某模块发生更新时,必须保障工程中与更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。

如图:左边的即为聚合工程

Maven-入门到进阶_第14张图片

 聚合工程的pom.xml文件书写步骤:

Maven-入门到进阶_第15张图片

Maven-入门到进阶_第16张图片

总结: 聚合工程开发:用一个工程管理多个工程,一个工程发生改动,依赖于这个工程的模块会随着改动。

POM继承

概念:继承描述的是两个工程之间的关系,子工程可以继承父工程的配置信息,常见为依赖关系的继承。

使用:

例如:声明一个父工程,把常用的一套坐标写在父工程的pom.xml中,以后只要子工程也需要这一套坐标,不必重复导入坐标,继承父工程即可。

作用 :

1.简化配置

2.减少版本冲突

 继承书写步骤:

Maven-入门到进阶_第17张图片

Maven-入门到进阶_第18张图片

Maven-入门到进阶_第19张图片

配置子工程中配置可选的依赖:

也就是子工程不会直接继承到,需要的话,手写(不需要写版本),自动继承父类版本。

Maven-入门到进阶_第20张图片

Maven-入门到进阶_第21张图片

聚合和继承的区别:

  • 作用
    • 聚合用于快速构建项目
    • 继承用于快速配置
  • 相同点
    • 聚合与继承的pom.xml文件打包方式都是pom,所有两者可以写到同一个pom文件中。
    • 聚合与继承均属于设计性模块,并无实际的模块内容。
  • 不同点
    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些(知道子类)。
    • 继承是在子模块中配置关系,父模块无法感知哪些模块继承了自己(不知子类)。

属性

我们可以像在java中定义属性一样,声明了属性以后,就可以在其他地方使用,在POM.xml文件中,我们也可以定义属性,定义了属性后,我们就可以在pom文件或maven的资源文件中使用。

 使用场景:

当我们许多依赖的版本需要统一管理时,也就是多个依赖需要版本相同,例如spring-webmvc,spring-test,spring-jdbc等等,他们的版本要求一致,我们就可以声明一个属性,给这个属性赋值,然后给他们引用即可,当版本需要修改时,我们只需要修改属性值即可。避免了某个漏改或改错的情况,导致版本冲突。

POM文件引用属性 

 属性定义的步骤:

1.在POM.xml文件中定义属性,自定义标签为属性名。属性值为自定义标签包裹,

Maven-入门到进阶_第22张图片

 2.引用属性,使用符号 ${ 属性名 }

Maven-入门到进阶_第23张图片

 资源文件中引用属性

我们在pom文件中设置的属性,不仅在pom文件内部可以使用,还能在外部的资源文件中使用。

例如:在配置文件中引用属性步骤

Maven-入门到进阶_第24张图片

Maven-入门到进阶_第25张图片

Maven-入门到进阶_第26张图片

${project.basedir}为内置属性。

Maven-入门到进阶_第27张图片

 属性列表

我们在pom.xml文件中声明的为自定义列表,但是maven中的属性不仅仅只有这个,还有如下等属性可以引用。

Maven-入门到进阶_第28张图片

 Maven依赖-版本管理

我们在导入坐标时,可以看到有许多样式的版本。例如:

纯数字、SNAPSHOT(快照版)、RELEASE(发布版)等等

工程版本:

  •  SNAPSHOT(快照版本)
    • 项目开发过程中临时输出的版,例如我们创建的工程。
    • 快照版本会随着开发的进展不断更新。
  • RELEASE(发布版本)
    • 项目组对外发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会随着开发的进展不断更新。

发布版本:

  • 纯数字版
  • beta版(经过beta测试)

Maven多环境配置与应用

maven提供配置多种环境的设定,帮助开发者在使用过程中快速切换环境。

例如:在测试阶段使用测试阶段的务器,在开发阶段使用开发的环境。 

Maven-入门到进阶_第29张图片

 多环境配置步骤:

 1.定义多环境的配置

Maven-入门到进阶_第30张图片

 2.使用配置好的多环境

方式1:可以将想要使用的环境定义为默认环境,直接运行,就是使用定义为默认的环境。

方式2:使用命令:

mvn 操作指令 -P 环境定义时的ID,例如执行如上定义的环境:

 mvn install -P pro_env

 Maven中的跳过测试

在执行指令时,不进行测试。

应用场景:

1.快速打包,不需要测试,打包更快。

2.功能更新中并且没有开发完毕,测试会报错,例如,就想先打个包。

 跳过测试执行方式:

方式一:IDEA中的快捷键

Maven-入门到进阶_第31张图片

方式二:命令方式

mvn 指令 -D skipTests

 方式三:细粒度控制(配置插件)

Maven-入门到进阶_第32张图片

 Maven中私服的使用

私服是一台独立的服务器,用于解决团队中内部资源的资源共享与资源同步的问题。

 私服:Nexus下载

下载地址:官网下载,选择自己对应系统下载。

Maven-入门到进阶_第33张图片

 Nexus安装和启动

1.下载好压缩包,解压后即使安装成功。

2.启动服务器:

到安装的目录中,找到bin目录,进入到bin目录的命令行界面。输入命令:

nexus.exe /run nexus

3.访问私服(nexus默认端口号为8081)

http://localhost:8081

 4.访问成功后,看到右上角,点击登录,按要求操作即可。

5.可以自定义创建仓库

Maven-入门到进阶_第34张图片 

 私服中的一些概念

 在私服中,其实就是存放着许多的仓库,供我们存储和提取资源。许多仓库的组成,就是仓库组,我们在进行资源的上传时,需要指定某个仓库,因为每个团队所使用的仓库不一样。但是我们向其中提取资源时,只需要访问仓库组即可获取,不需要精确到某个仓库。

过程:

当我们访问仓库组中的资源时,如果仓库组中不存在我们想要的资源,此时私服就会到设置好的中央仓库中下载,并返回给我们。然后将此资源进行存储。

Maven-入门到进阶_第35张图片

私服仓库分类

Maven-入门到进阶_第36张图片

 本地仓库访问私服仓库

 本地仓库中需要的配置 

到我们下载的maven的目录 /conf/settings.xml 打开文件进行配置。

配置1:配置访问私服需要的权限(账号密码)


	
	仓库名称
	用户名
	密码
	

 配置2:配置私服访问路径


	
		仓库组名
		*
		仓库组URL地址
	

仓库组URL可以点击仓库组,显示的信息面板有显示。

 使用私服上传和下载资源

在pom文件中设置上传和下载所使用的仓库。


	
		仓库名称
		仓库的URL地址
	

上传资源 (部署资源到私服)

方式一:IDEA中快捷键deploy

Maven-入门到进阶_第37张图片

 方式二:使用命令

mvn deploy

更改私服所应用的中央仓库

设置私服所使用的中央仓库,当访问的资源私服中不存在时,向设置好的中央仓库中获取后返回给我们。

Maven-入门到进阶_第38张图片

你可能感兴趣的:(JavaWeb,java,maven,idea)