Maven

为什么要学maven

java项目的管理和构建工具

  • 它提供了一套标准化的项目结构不同开发工具创建的项目结构是不一样的

但是maven规范了项目的结构,开发人员上手比较方便

  • 提供了一套标准化的构建流程(编译、测试、打包、发布….)
    • 繁琐一个流程:编译 -》测试-》打包—-》部署

image-20240720213544357

  • 提供了一套依赖管理机制(管理所有项目中的jar包)

    之前传统的jar包和项目结合在一起,体积就会很大,占用磁盘空间过大,传输过程非常慢

    • 解决:利用仓库统一管理了所有的jar包
    • jar包和jar包之间的版本冲突问题
    • 解决:利用“依赖传递”特性把相关的jar都会引入进来,有效解决一定程度的版本控制问题

下载安装maven

image-20240720214145842

首先确认java的jdk版本:jdk17

image-20240720214225157

修改配置文件

image-20240720214351099

修改镜像

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
28
29
30
<!-- 阿里云仓库 -->
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 华为云仓库 -->
<mirror>
<id>huaweicloud</id>
<mirrorOf>*</mirrorOf>
<url>http://repo.huaweicloud.com/repository/maven/</url>
</mirror>

<!-- 中央仓库1 -->
<mirror>
<id>central</id>
<mirrorOf>central</mirrorOf>
<name>Maven Repository Switchboard</name>
<url>http://repo.maven.org/maven2/</url>
</mirror>

<!-- 中央仓库2 -->
<mirror>
<id>central</id>
<mirrorOf>central</mirrorOf>
<name>Maven Repository Switchboard</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>

配置环境变量

image-20240720215145204

image-20240720215316713

验证

image-20240720215539315

在IDEA中配置IDEA

image-20240720215818677

在IDEA中创建maven项目

image-20240720220937954

Maven结构介绍

image-20240720221902026

采用约定目录结构的意义

约定大于配置

image-20240722194507440

image-20240722195225325

这样才能打包成web文件

image-20240722195330820

设置web文件夹位置。

maven命令

image-20240722195603841

IDEA里面自动有

如果要用终端手动操作,就用mvn clean…类似这样

测试代码

image-20240722195847464

image-20240722195949615

这个类最用Test开头,这样就可以使用Test命令,自动执行Test文件夹 中的Test代码

image-20240722200313259

install就是把war包下载到本地仓库

deploy部署基本上用不上

依赖范围

编译范围:Main中使用

测试范围:test中使用

运行/打包范围:打包的时候会自动把jar包放入

image-20240722200824052

image-20240722201452397

依赖传递

image-20240722201858744

war包是不能被别的项目引用的

想要依赖传递要先将B项目install到本地仓库

如果不想依赖过来就设置scope就可以了test和provide是不会传递的,同样设置optional 是否传递,默认是false 会传递。

依赖的排除

image-20240722231305195

image-20240722231551839

聚合工程

因为当两个项目进行依赖的时候,一个工程进行修改之后要进行install之后另一个工程才能进行依赖就很麻烦这时候就需要聚合工程。

这个工程主要用来管理不会用来写代码

1、新建个工程

2、删除src

3、把packaging修改成pom表示不是具体的jar包或者war包

4、新建模块

5、把子工程管理起来,在pom文件中

image-20240722233152994

Maven继承

image-20240722234318988

用parent标签

一个依赖:并不是子项目必须要的

那么我们可以把依赖放入dependencyManagement里面

然后在需要的项目里面单独加入依赖就好了,这样有个好处,子项目里的依赖就不用设定版本了,版本在父maven里面已经规定好了

通常会在父maven项目中管理所有的依赖的版本,声明在父Maven项目中

对于每个工程都必须要的放在dependencies中,版本配在父maven中