切换主题
二、Maven基础
一、概述
Maven是专门用于管理和构建Java项目的工具,它的主要功能有
- 提供了一套标准化的项目结构
- 提供了一套标准化的构建流程(编译,测试,打包,发布....)
- 提供了一套依赖管理机制
1、项目结构

2、仓库

仓库:用于存储资源,包含各种jar包
仓库分类:
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar
- 中央仓库中的jar都是开源的,不能存储具有版权的资源
- —定范围内共享资源,仅对内部开放,不对外共享
- 保存具有版权的资源,包含购买或自主研发的jar
3、坐标
(1)什么是坐标
介绍:Maven中的坐标用于描述仓库中资源的位置
网址:https://repo1.maven.org/maven2/
(2)Maven坐标主要组成
groupld
(组织ID):定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
artifactld
(项目ID):定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
version
(版本号):定义当前项目版本号
packaging
:定义该项目的打包方式
(3)Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
(4)查询Maven坐标
2、依赖管理
依赖管理就是管理项目所依赖的第三方资源(jar包、插件)
(1)pom.xml文件管理坐标
例:引入mysql
驱动坐标
xml
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
(2)刷新maven查看效果

二、安装与配置
1、下载maven
网盘链接:https://www.123pan.com/s/QvTuVv-REjw.html
2、修改setting.xml文件
(1)修改本地仓库地址
xml
<localRepository>存放地址</localRepository>

(2)修改阿里云镜像
xml
<mirrors>
<!-- 配置具体的仓库的下载镜像 -->
<mirror>
<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
<id>nexus-aliyun</id>
<!-- 对哪种仓库进行镜像,简单来说就是替代那个仓库 -->
<mirrorOf>*</mirrorOf>
<!-- 镜像名称 -->
<name>Nexus aliyun</name>
<!-- 镜像url -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>

3、配置环境变量
(1)新增环境变量

(2)加入环境变量

三、依赖管理
1、依赖配置模版
xml
<!--设置当前项目所依赖的所有jar-->
<dependencies>
<!--设置具体的依赖-->
<dependency>
<!--依赖所属群组id-->
<groupId>Junit</groupId>
<!--依赖所属项目id-->
<artifactId>Junit</artifactId>
<!--依赖版本号-->
<version>4.12</version>
</dependency>
</dependencies>
2、依赖传递
依赖具有传递性,分两种
(1)直接依赖:在当前项目中通过依赖配置建立的依赖关系
(2)间接依赖:被依赖的资源如果依赖其他资源,则表明当前项目间接依赖其他资源
3、依赖传递冲突
三种优先法则
(1)路径优先:当依赖中出现相同资源时,层级越深,优先级越低,反之则越高
(2)声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的
(3)特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的
4、可选依赖
可选依赖指的是对外隐藏当前所依赖的资源➡不透明
加一个
<optional>
标签
xml
<dependencies>
<dependency>
<groupId>Junit</groupId>
<artifactId>Junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
</dependencies>
5、排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
xml
<dependencies>
<dependency>
<groupId>Junit</groupId>
<artifactId>Junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</dependency>
</dependencies>
6、依赖范围
通过设置坐标的依赖范围(scope),可以设置对应jar的作用范围
- 编译环境
- 测试环境
- 运行环境
依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 存储在本地的jar包 |
import | 引入DependencyManagement |
<scope>
:默认值compile
四、手动安装依赖
1、下载jar包
2、安装jar包
1、语法
bash
mvn install:install-file -Dfile=jar包路径 -DgroupId=jar包所属群组id -DartifactId=jar包所属项目id -Dversion=jar包版本号 -Dpackaging=jar
2、使用
bash
C:\Users\31190>mvn install:install-file -Dfile=E:\code\java\spring-boot-starter-websocket-3.2.5.jar -DgroupId=org.spring
framework.boot -DartifactId=spring-boot-starter-websocket -Dversion=3.2.5 -Dpackaging=jar
3、效果
bash
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- install:3.1.2:install-file (default-cli) @ standalone-pom ---
[INFO] pom.xml not found in spring-boot-starter-websocket-3.2.5.jar
[INFO] Installing E:\code\java\spring-boot-starter-websocket-3.2.5.jar to D:\Config\MAVEN\resources\org\springframework\boot\spring-boot-starter-websocket\3.2.5\spring-boot-starter-websocket-3.2.5.jar
[INFO] Installing C:\Users\31190\AppData\Local\Temp\mvninstall9767424104691847731.pom to D:\Config\MAVEN\resources\org\springframework\boot\spring-boot-starter-websocket\3.2.5\spring-boot-starter-websocket-3.2.5.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.466 s
[INFO] Finished at: 2024-08-19T15:42:12+08:00
[INFO] ------------------------------------------------------------------------
五、生命周期和插件
1、流程图

maven对项目构建的生命周期划大致分为3套
- clean:清理工作
- default:核心工作,例如编译,测试,打包,安装等
- site:产生报告,发布站点等
同一生命周期内,执行后边的命令,前边的所有命令会自动执行
2、clear生命周期
clean:清理工作
pre-clean:执行一些在clean之前的工作
clean:移除上一次构建产生的所有文件
post-clean:执行一些在clean之后立刻完成的工作
3、default生命周期
default:核心工作,例如编译,测试,打包,部署等

4、site生命周期
pre-site:执行一些在生成站点文档之前的工作
site:生成项目的站点文档
post-site:执行一些在生成站点文档之后完成的工作,为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上
complie
:编译bashmvn complie
clean
:清理bashmvn clean
test
:测试bashmvn test
package
:打包bashmvn package
install
:安装bashmvn install
5、插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件
- maven默认在各个生命周期上都绑定了预先设定的插件来完成相应功能
- 插件还可以完成一些自定义功能
插件的配置方式如下:我们以打包源码为例
xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<excution>
<goals>
<!--当goal属性的值为test-jar时,是对测试代码打包-->
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</excution>
</executions>
</plugin>
</plugins>
</build>