没有理想的人不伤心

Maven 简介

2025/09/01
3
0

image.png

核心文件:pom.xml
Project Object Model 项目对象模型

maven 仓库:本地 --> 远程 --> 中央仓库
依赖下载顺序如上箭头

mvn complie:编译
mvn package:打包成 jar 包

idea 中的 maven 管理:
image.pngclean:清除编译后产生的字节码和 jar 包等文件
validate:验证项目(如配置等)是否正确,编译的前置校验
compile:编译
test:测试,会执行项目中的所有测试用例
package:把编译生成的字节码文件打包生成 jar 或 war 包

执行 package 前,会自动执行 compile 和 test

verify:验证打包是否正确
install:将 jar 包放入本地仓库
deploy:将 jar 包上传到远程仓库
site:根据当前项目生成静态的站点文件,对项目有一定的介绍

依赖管理:

在 maven 中 jar 包的唯一标识由 groupId、artifactId、version 确定

  • groupId:一般是公司的标识
  • artifactId:一般是项目的唯一标识
  • version:项目的版本

如何知道 maven jar 包的唯一标识?
mvnrepository:https://mvnrepository.com/

scope 表示该依赖生效的范围,如这里的 test 表示只能在测试时使用,在正式代码中导入该包就会报错
常见 scope 还有 compile、runtime、system、import 等

依赖传递
依赖具有传递性,直接写在项目 pom.xml 中的依赖是直接依赖,而直接依赖所依赖的依赖就是间接依赖,maven 会自动解析依赖关系,并导入对应的 jar 包
因此只需要在 pom.xml 中写入直接依赖,而非所有的依赖
只有 scope 为 compile 的依赖才会被传递

依赖冲突(不同依赖所依赖包的版本号不同,就会产生冲突)
冲突解决:

  1. 最短路径优先:根据依赖传递的路径
  2. 先声明优先:根据在 pom.xml 中的声明顺序为

手动解决依赖冲突
通过在 pom.xml 中在某个依赖下设置 exclusion 标签
image.png

或者在指定依赖下使用 optional 标签
image.png

父子工程
1、 创建父工程
将 pom.xml 中的 packaging 标签内容修改为 pom ,这里的值可以是

  • jar
  • war:一般是 web 项目打包成 war 包
  • pom:不生成 jar 或 war 包,用于管理其他子工程
    表示编译生成的文件,pom 表示不生成任何打包文件
    image.png

因此父工程的 src 目录没有任何作用,建议删除
通过右击父工程,new 一个 module,创建子工程
查看子工程的 pom.xml 文件,多了 parent 标签
image.png

这里创建了三个子模块
image.png

在父模块的 pom.xml 中,通过聚合来管理子模块,将多个子模块组织在一起,方便构建和维护,如使用一个命令构建所有子模块
image.png

父子模块的依赖继承:
父模块中定义的依赖无条件的由子模块继承
scope 不是 compile 也可以继承

由于是无条件继承,那么会使父子模块产生耦合
可以在父模块的 pom.xml 中使用 dependencyManagement 标签来使子模块可选的继承
父模块的 pom.xml
image.png
子模块的 pom.xml,无需指定版本号,从父模块继承
image.png

properties 标签
定义一些公共的属性,使用时语法: ${属性名}
如下图定义了 spring 的版本,在依赖中只需要指定该属性名,就可以实现快捷修改版本号
image.png