maven

介绍

Maven是一个项目管理工具,它的作用就是管理项目,主要体现在两个方面:依赖管理一键构建

  • 依赖管理:对jar包的管理方式,maven会将所有需要的jar包放在本地仓库,每个项目通过配置文件文件引入自己所需要的
  • 一键构建:一个命令就可以完成一个项目构建过程

依赖管理

image-20220702190009993

jar包在maven本地仓库中是按照什么结构存放的?

image-20220512093009649

我们的项目应该怎么获取对应的jar包

image-20220512093720894

本地仓库没有jar包从哪里下载

image-20220512095046480

一键构建

项目构建:一个项目从源代码完成的那一刻起后面的流程(清理 编译 测试 打包 安装 部署)就称为项目的构建过程

一键构建:上面的所有过程都对应着一个命令

安装

下载软件

3.3.9 版本的下载地址: http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/

image-20200816091839747

安装

将压缩包解压到一个==没有中文,没有空格==的目录

image-20200816091954365

目录结构介绍

image-20200816092247884

配置maven

① 配置本地仓库的目录位置

image-20200816092540732

② 配置阿里云镜像

默认情况下,当本地没有需要的依赖的时候,maven会从apache的中央仓库下载,速度非常慢,在这里配置成阿里云的仓库地址

1
2
3
4
5
6
7
8
9
  <mirrors>
    <!--阿里镜像-->
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>       
    </mirror>
  </mirrors>

image-20220512101609376

复制资料中的本地仓库

image-20200816092649003

配置环境变量

==注意:添加的位置一定是按照自己软件的安装位置写,不要照抄我的, 而且要到bin一级目录==

image-20200816092920638

测试

启动cmd, 在电脑的任意位置使用mvn -version进行测试

image-20200816093131115

标准结构

1
2
3
4
5
6
7
8
9
* pom.xml------------------------------------------------------------这是maven要使用的当前项目的配置文件
* target ------------------------------------------------------------这是存储项目构建过程中产生的文件的(这个文件如果不存在会自动创建)
* src    ------------------------------------------------------------这是项目的资源文件
   |--main -------------------------------------------------------- 这是当前项目的正式文件
   		|-- java-----------------------------------------------存放的是正式的java文件
   		|-- resources------------------------------------------存放的是正式的配置文件
   |--test -------------------------------------------------------- 这是当前项目的测试文件
		|-- java-----------------------------------------------存放的是测试的java文件       
		|-- resources------------------------------------------存放的是测试的配置文件(这个目录一般是没有的)

常见命令

maven的项目构建过程是基于命令的,下面来看一些常见的命令

clean

清理命令,执行clean会删除target目录, 即清理掉上一次项目构建产生的文件

image-20220512103824293

compile

编译命令,作用是将src/main/java下的文件(正式的java文件)编译为class文件输出到target目录下

image-20220512104214377

test

测试命令,作用是执行 src/test/java 下的测试类,并编译为class文件输出到target目录下

image-20220512104510717

package

打包命令,打的是所有的正式代码(src/main) 对于java工程执行package打成jar包,对于web工程打成war包

image-20220512104919445

install

安装命令,将打好jar包或者war包安装到本地maven仓库

image-20220512105448344

deploy

部署命令,将打好的jar包或war包部署到私服中

总结:

  • clean:删除target目录
  • compile:将正式的java代码进行编译(不包括test),生成class文件放到target目录中
  • test:将test代码进行编译(不包括java),生成class文件放到target目录中
  • package:将正式的java代码打包成jar包或war包
  • install:将打好jar包或者war包安装到本地maven仓库
  • deploy:将打好jar包或者war包安装到私服中

搭建maven工程( 重点 )

本章节介绍如何在idea中配置使用maven软件

配置环境

maven全局配置

在主界面配置之后,其他项目再也不用配置了

image-20201129101344997

创建工程

创建maven工程

image-20220704102115748

编写项目标识

image-20211016101249068

image-20220704102244850

编写项目名字

image-20211016101429315

image-20220704102401603

工程使用

编写主类

image-20220704103907317

导入依赖

image-20220704104706554

编写测试类

image-20220704104752574

依赖范围

1
2
3
4
5
6
* 很多情况下,我们需要精确控制一个依赖在哪个过程中生效,为了实现这个功能,Maven为每个依赖提供了作用范围,即:依赖范围。
* maven支持的依赖范围主要有下面几种:
	compile: 默认依赖范围,作用域在编译、测试、运行时都有效。
	test:    作用域在测试时有效,编译和运行时不需要。
	provided:作用域在编译、测试时有,运行时不需要。 
	runtime: 作用域在测试、运行时有效,编译时不需要。

image-20200816090248948

maven回顾

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1. maven的作用
	依赖管理: pom.xml
	一键构建: 命令----->一键构建

2. maven的常用命令
	clean: 删除了target目录
	compile: 将正式java文件编译成class文件
	test: 运行测试类
	package: 将正式文件打出(jar  war)
	install: 将包安装到本地仓库
	deploy:  将包安装到私服
		
3. maven仓库的种类
	本地
	中央
	私服
	
4. maven的主要标签
	groupId     公司(com.itheima)
	artifactId  项目
	version     版本号
		SNAPSHOT  快照   测试
		RELEASE   发行
	packaging
		jar  普通java工程
		war  web工程
		pom  父工程

分模块开发

拆分与聚合的思想

拆分 将原来的一个项目拆分成一个个小的模块, 每个模块都有自己的坐标, 当其它项目需要本模块的功能时, 只需要按照坐标引入本模块就可以了

聚合 通过坐标的形式,将各个模块组装在一起,完成一个项目的功能

image-20220731091654890

父子工程搭建

创建父工程

image-20220731093831934

创建dao模块

image-20220731093436583

创建service模块

image-20220731093524442

创建web模块

image-20220731093619429

建立依赖关系

image-20220731094254950

两套关系梳理

在上面的工程中, 存在两套关系

  • 父子工程之间: 继承关系, 子工程可以使用父工程中的jar包
  • 模块工程之间: 默认是没有任何关系的,但是可以通过依赖建立两者之间的关系,而且这个依赖关系是可以传递的
1
2
3
* web---->service----->dao
	web---->service     service----->dao   直接依赖
	web---->dao     间接依赖

依赖冲突

在依赖的传递过程中,很容易出现同一jar包的版本冲突问题,这个就称为依赖冲突

image-20220731095053101

第一声明优先原则

在pom文件定义依赖,先声明的依赖为准。

image-20220731095808885

路径近者优先原则

从依赖程序开始算起,到被依赖的程序,以路径短的为准。

image-20220731100113590

依赖排除

依赖排除就是在依赖引入的过程中,通过exclusions标签排掉指定的跟随依赖

image-20220731100715654

版本锁定

面对众多的依赖,有一种方法不用考虑依赖路径、声明优先等因素,可以采用直接锁定版本的方法确定依赖构件的版本

版本锁定后,系统会以锁定的版本的为准添加到工程中,此方法在企业开发中常用。

优化:提取版本信息

image-20220731101812309