一. 理论
1. 概念作用
Maven是项目构建工具,通过Maven创建Java项目,Maven构建的Java项目的目录结构为:
2. 依赖管理
Java项目一般会依赖多个Jar包,Maven可以管理Jar包,通过gav定位jar包,默认先从本地仓库找,如果没找到再去远程仓库找(仓库通过settings.xml配置)
3. 间接依赖与排除方法
Maven默认会将引入Jar包所依赖的Jar包一并引入,可以通过以下方式排除掉间接引入的jar包
<exclusions>
<exclusion>
<groupId></groupId> <artifactId></artifactId><version></version>
</exclusion>
</exclusions>
4. 解决依赖冲突策略
若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,Maven采用两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。
方式一:短路优先
本项目——>A.jar——>B.jar——>X.jar
本项目——>C.jar——>X.jar
若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar,在此时,Maven只会引用引用路径最短的Jar。
方式二:声明优先
若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。
5. 聚合
父工程通过聚合,可以对其子工程统一打包部署,并通过控制构建顺序,避免出现以来混乱导致的构建失败
<modules>
<module>web-connection-pool</module>
<module>web-java-crawler</module>
</modules>
6. 继承
父工程定义依赖版本以及通用依赖,子工程继承父工程后,默认依赖了父工程中的依赖。
父工程pom.xml
<groupId>com.micozone</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<!--
Maven 项目的打包方式:
1、jar:通过 maven package 命令将项目打成 jar 包
2、war:通过 maven package 命令将项目打成 war 包
3、pom:父工程中使用,既不打成 jar 包,也不打成 war 包
-->
<packaging>pom</packaging>
<!--
依赖管理器:
依赖管理器中的依赖,子工程使用依赖时可以不指定版本号,版本号通过依赖管理器管理
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
<!--父工程中的依赖,子工程会继承-->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
子工程pom.xml
<!--指定父工程-->
<parent>
<groupId>com.micozone</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>xxx</artifactId>
二、原理
1.pom.xml