Maven
→ 返回构建工具
核心概念
坐标(GAV)唯一标识一个构件:
<groupId>com.example</groupId> <!-- 组织/公司 -->
<artifactId>my-app</artifactId> <!-- 项目名 -->
<version>1.0.0</version> <!-- 版本 -->仓库:
| 类型 | 说明 |
|---|---|
| 本地仓库 | ~/.m2/repository,优先查找 |
| 私服(Nexus/Artifactory) | 公司内部镜像,管控依赖 |
| 中央仓库 | repo.maven.apache.org,最终来源 |
查找顺序:本地仓库 → 私服 → 中央仓库。
生命周期
Maven 有三套独立生命周期,常用的是 default:
validate → compile → test → package → verify → install → deploy
| 阶段 | 说明 |
|---|---|
| compile | 编译 src/main/java |
| test | 编译并运行 src/test/java |
| package | 打包为 jar/war |
| install | 安装到本地仓库 |
| deploy | 发布到远程仓库 |
执行某个阶段会自动执行其前面所有阶段,例如 mvn package = compile → test → package。
另外两套生命周期:
- clean:pre-clean → clean → post-clean
- site:生成项目文档站点
依赖范围(scope)
| scope | 编译 | 测试 | 运行 | 打包 | 说明 |
|---|---|---|---|---|---|
| compile(默认) | ✓ | ✓ | ✓ | ✓ | 最常用 |
| provided | ✓ | ✓ | ✗ | ✗ | 容器提供,如 servlet-api |
| runtime | ✗ | ✓ | ✓ | ✓ | 运行时需要,如 JDBC 驱动 |
| test | ✗ | ✓ | ✗ | ✗ | 仅测试,如 JUnit |
| system | ✓ | ✓ | ✗ | ✗ | 指定本地路径,不推荐 |
依赖传递与冲突
A → B → C,A 间接依赖 C(传递依赖)。
冲突解决规则:
- 最短路径优先:
A→B→C:1.0和A→C:2.0,选C:2.0 - 声明顺序优先:路径相同时,
pom.xml中先声明的优先
排除传递依赖:
<dependency>
<groupId>com.example</groupId>
<artifactId>b</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>com.example</groupId>
<artifactId>c</artifactId>
</exclusion>
</exclusions>
</dependency>强制指定版本(在 <dependencyManagement> 中声明):
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>c</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>BOM(Bill of Materials)
统一管理一组相关依赖的版本,避免版本冲突:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>引入后,声明 Spring 相关依赖无需指定版本号。
多模块项目
parent/
├── pom.xml ← 父 pom,packaging = pom
├── module-a/
│ └── pom.xml
└── module-b/
└── pom.xml
父 pom 声明 <modules> 统一管理子模块,子模块通过 <parent> 继承父 pom 的依赖版本和插件配置。
常用插件
| 插件 | 说明 |
|---|---|
| maven-compiler-plugin | 控制编译版本(source/target) |
| maven-surefire-plugin | 运行单元测试 |
| maven-failsafe-plugin | 运行集成测试 |
| maven-shade-plugin | 打 fat jar(含所有依赖) |
| spring-boot-maven-plugin | 打可执行 Spring Boot jar |
常用命令
mvn clean # 清理 target/
mvn compile # 编译
mvn test # 运行测试
mvn package # 打包
mvn package -DskipTests # 打包跳过测试
mvn install # 安装到本地仓库
mvn deploy # 发布到远程仓库
mvn dependency:tree # 查看依赖树
mvn dependency:analyze # 分析无用/缺失依赖
mvn help:effective-pom # 查看完整合并后的 pomsettings.xml 常用配置
~/.m2/settings.xml:
<settings>
<!-- 配置镜像加速(如阿里云) -->
<mirrors>
<mirror>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<!-- 配置私服认证 -->
<servers>
<server>
<id>nexus</id>
<username>admin</username>
<password>password</password>
</server>
</servers>
</settings>