什么是maven
定义:maven是一个项目管理工具,用于项目构建、依赖管理和项目信息管理
核心作用:
依赖管理,自动下载jar包及其依赖
统一结构,规定了代码、配置、源码文件位置
构建自动化,编译 测试 打包 部署
核心关键点
pom (project object model):项目对象模型,就是pom.xml文件,是maven的核心文件
坐标 (coordinates)
groupid 组织公司id
artifactid 项目名
version
仓库(repository)
本地仓库,电脑上存jar包的文件夹
中央仓库,maven官方维护的巨大仓库
远程/私服仓库,公司内部或阿里云镜像
标准的目录结构
src/main/java 放java的远吗
src/main/resources 放配置文件 如properties.xml
src/test/java 放测试代码
target 放编译后的字节码文件
pom.xml 项目目录下的配置文件
pom.xml 详解
基础信息
modelversion
gourpid, artifactid version
packaging 打包方式 war jar pom
dependencies 依赖管理
如何引入依赖 去 mvnrepository.com 搜索并复制 XML)
依赖范围(scope)
compile 默认 编译 测试 运行都有效
test 只有测试时有效 如junit
provoded 编译、测试有效
runtime 编译不需要 运行需要
plugins 插件管理
maven的本质是插件的集合
常用插件 如:maven-compiler-plugin
生命周期和常用命令
clean 清理构建
compile 编译主代码
test 运行测试单元
package 打包
install 把包安装到本地(其他本地项目可以使用)

deploy 发布到远程仓库
mvn package -DskipTests(只是不执行测试用例,但测试代码还是会编译)
依赖的传递
如果A依赖B B依赖C 那么A自动依赖C
排除依赖可以用
多模块管理(聚合与集成)
父工程 (packaging 为 pom) 管理依赖版本 (dependencyManagement)
子模块继承父工程

maven 依赖仲裁
黄金法则一:路径优先
maven会看谁离项目根目录最近
路径 A (你的直接引用):
你的项目 -> fastjson (v2.0)
路径长度:1
路径 B (传递依赖):
你的项目 -> C -> B -> A -> fastjson (v1.0)
路径长度:4
结论:1 < 4。因为路径 A 更短,Maven 认为你是故意直接引入的,所以直接采纳 v2.0,完全忽略 v1.0。
黄金法则二:声明顺序优先
如果法则一的路径一样,则看谁先申明的
你的项目 -> X -> log4j (v1.0)
你的项目 -> Y -> log4j (v2.0)
如果你先写 <dependency>X</dependency>,Maven 就用 v1.0。
如果你先写 <dependency>Y</dependency>,Maven 就用 v2.0。
⚔️ 实战:如何优雅地控制版本?
虽然“路径最短”能解决问题,但在企业级开发中,我们通常用更高级的手段来控制,而不是靠运气或手动排顺序。
方法 1:排除法 ( <exclusions> ) —— “外科手术”
你不想要 A 带进来的低版本 fastjson?那就把它切掉。
1 | xml |
这样做比较彻底,但如果依赖链路很长,找起来很累。
方法 2:依赖管理 ( <dependencyManagement> ) —— “尚方宝剑” (最推荐)
这是在父工程或者当前工程里最权威的声明。
只要你在 <dependencyManagement> 里锁定了 fastjson 是 2.0 版本,那么不管底下有多少个 C、B、A 引用了多少个乱七八糟的版本,统统失效,全部强制使用 2.0。
1 | xml |
注意:dependencyManagement 只是锁定版本,并不代表引入包。你需要在使用的地方再次引入(不用写版本号)。
maven 其他标签
maven的官方文档 https://maven.apache.org/pom.html#Distribution_Management
| 上一章 | 目录 | 下一章 |
|---|---|---|
| IDE使用(IDEA) | java基础 | [hello world](/2026/04/04/hello world/) |