Skip to content

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-webSpring MVC、Tomcat、JSON
spring-boot-starter-security安全框架
spring-boot-starter-data-redisRedis 客户端

与 luote 脚手架的关系

依赖在脚手架中的用途
mybatis-plus-boot-starterORM 与分页
jjwtJWT 签发与解析
springdoc-openapiSwagger UI
jetcache-starter-redis二级缓存
minio / aliyun-sdk-oss文件存储

发布 create-luote 前,scripts/verify.js 会执行 mvn -q -DskipTests compile 确保后端模板能编译通过。

下一章:Spring Boot 入门

MIT Licensed