Maven 项目管理
作者: luote (luote) · 个人主页 luote996.cn
Maven 解决什么问题
Java 项目依赖众多第三方库(Spring、MyBatis 等),手动下载 jar 包不可维护。Maven 通过 pom.xml 声明依赖,自动从中央仓库下载,并统一编译、测试、打包流程。
pom.xml 核心结构
脚手架 templates/luote-backend/pom.xml 主要包含:
| 节点 | 含义 |
|---|---|
| parent | 继承 spring-boot-starter-parent,统一版本管理 |
| groupId / artifactId / version | 项目坐标,如 cn.luote:luote-backend:1.0.0 |
| properties | 属性,如 java.version=17 |
| dependencies | 依赖列表 |
| build | 插件:编译、打包 spring-boot 可执行 jar |
添加依赖示例:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>Spring Boot 的 parent 已管理版本号,一般不必再写 <version>。
目录约定
luote-backend/
├── pom.xml
└── src/
├── main/
│ ├── java/ # Java 源码
│ └── resources/ # 配置、SQL、静态资源
└── test/
└── java/ # 单元测试Maven 默认按此结构查找代码,不要随意改动。
常用命令
| 命令 | 作用 |
|---|---|
mvn compile | 编译主代码 |
mvn test | 运行测试 |
mvn package | 打 jar 包到 target/ |
mvn spring-boot:run | 启动 Spring Boot 应用 |
mvn -DskipTests package | 跳过测试打包 |
mvn dependency:tree | 查看依赖树,排查冲突 |
本地开发最常用:mvn spring-boot:run。修改 Java 代码后需重启进程(与前端热更新不同)。
依赖范围 scope
| scope | 说明 |
|---|---|
| compile | 默认,编译和运行都需要 |
| test | 仅测试阶段 |
| provided | 编译需要,运行由容器提供 |
了解即可,脚手架 pom 中绝大多数是 compile。
版本冲突
两个库依赖同一组件的不同版本时,Maven 按「就近原则」选一个。出现 NoSuchMethodError 时,用 mvn dependency:tree 查冲突,在 pom 里用 <dependencyManagement> 或 <exclusions> 排除。
与 Spring Boot 的关系
spring-boot-starter-* 是一组 starter 依赖,把相关库打包在一起,例如:
| starter | 包含能力 |
|---|---|
| spring-boot-starter-web | Spring MVC、Tomcat、JSON |
| spring-boot-starter-security | 安全框架 |
| spring-boot-starter-data-redis | Redis 客户端 |
与 luote 脚手架的关系
| 依赖 | 在脚手架中的用途 |
|---|---|
| mybatis-plus-boot-starter | ORM 与分页 |
| jjwt | JWT 签发与解析 |
| springdoc-openapi | Swagger UI |
| jetcache-starter-redis | 二级缓存 |
| minio / aliyun-sdk-oss | 文件存储 |
发布 create-luote 前,scripts/verify.js 会执行 mvn -q -DskipTests compile 确保后端模板能编译通过。
下一章:Spring Boot 入门