一、为什么要学习maven?
maven是一款项目包管理以及项目构建工具,已经广泛流行于各大中大型项目开发构建。解决了过去传统web项目依赖包管理混乱问题。
二、maven的基本概念
1.maven的本地仓库与中心仓库
maven拉取jar包是通过中央仓库拉取到本地仓库,优先会去本地仓库查询引入的jar包是否存在
2.坐标
maven的pom文件中的groupId(通常是公司的域名或者包名) artifictId(项目的唯一标识符) version(依赖的版本号)三个标签可以唯一定位jar包,maven就是用这些标签唯一定位依赖位置
3、maven项目的基本结构
tips:pom文件统一管理了项目的依赖版本,maven官方称之为项目对象模型(Project Object Model)
二、依赖引用
1.普通单个项目引用
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mavenTest</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Archetype - mavenTest</name>
<url>http://maven.apache.org</url>
<properties>
<!-- 声明具体的依赖版本-->
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<!-- 统一项目集中管理配置-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2.父子工程依赖引用(日常工作最常用)
idea新建一个maven项目,在下面新建两个module为子项目,外层为父项目,实际工作中,最常用的就是这种模式,会包含子项目的相互依赖,子项目继承父项目的依赖,子项目覆盖或者忽略父项目的依赖
此时默认两个模块都继承了父工程的依赖
如何让模块引入另一个模块的依赖?
项目A的pom文件引入mysql的驱动依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>mavenTest</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.example</groupId>
<artifactId>projectA</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Archetype - projectA</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>mavenTest</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>projectB</artifactId>
<name>Archetype - projectB</name>
<url>http://maven.apache.org</url>
<!-- 项目B加入 项目A的坐标 默认也会引入项目A引入的依赖-->
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>projectA</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
tips:在使用idea开发的时候,可能会出现项目众多,依赖众多,不好找到依赖来源的情况,可以使用idea查看maven的依赖链路
快捷键ctrl+F可以快速查询对应的依赖
日常开发中可能引入其他项目的时候,不想使用他的依赖,可以添加exclusions标签
或者在当前项目直接引入新的依赖版本进行覆盖,maven获取依赖默认是优先当前项目的pom文件的,如果当前pom文件有依赖会默认omit其他项目的依赖