Maven 使用:Java 项目的构建利器
Maven 是 Java 项目构建的事实标准。虽然 Gradle 更灵活,但 Maven 的稳定性、插件生态和团队协作优势,让它仍然是大多数项目的首选。
核心概念
| 概念 | 说明 |
|---|---|
| 坐标 | GAV(GroupId、ArtifactId、Version)唯一标识依赖 |
| 仓库 | 本地仓库 + 远程仓库(阿里云/Maven Central) |
| 生命周期 | clean、compile、test、package、install、deploy |
| 依赖传递 | A 依赖 B,B 依赖 C,A 自动获得 C |
常用命令
bash
mvn compile # 编译源代码
mvn test # 运行测试
mvn package # 打包(不运行测试)
mvn clean package # 先清理再打包
mvn install # 安装到本地仓库
mvn deploy # 发布到远程仓库
mvn dependency:tree # 查看依赖树
mvn dependency:analyze # 分析未使用依赖跳过测试
bash
# 跳过测试编译(不编译测试)
mvn package -Dmaven.test.skip=true
# 跳过测试运行(编译但跳过执行)
mvn package -DskipTests依赖管理
依赖范围
| scope | 编译 | 测试 | 运行 | 打包 |
|---|---|---|---|---|
| compile | ✅ | ✅ | ✅ | ✅ |
| test | ❌ | ✅ | ❌ | ❌ |
| provided | ✅ | ✅ | ❌ | ❌ |
| runtime | ❌ | ✅ | ✅ | ✅ |
xml
<!-- Spring Boot web 起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Servlet API,仅编译和测试时需要,打包时不包含 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>依赖冲突
依赖冲突时,Maven 使用"最短路径优先"原则。如果想显式指定版本:
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>查看冲突:
bash
mvn dependency:tree -Dincludes=com.alibaba # 只看某个依赖的传递依赖
mvn dependency:tree # 完整依赖树私有仓库配置
在 ~/.m2/settings.xml 里配置阿里云镜像加速:
xml
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>多模块项目
xml
<!-- 父 pom -->
<modules>
<module>module-a</module>
<module>module-b</module>
</modules>
<!-- 子模块 -->
<parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>插件配置
xml
<build>
<plugins>
<!-- Maven 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<!-- Spring Boot 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>总结
- 统一版本:父 POM 管理版本,子模块继承
- 合理依赖范围:用 provided 避免打包无用依赖
- 依赖分析:
mvn dependency:analyze定期检查 - 镜像加速:配置阿里云仓库,下载速度翻倍
Maven 是工具,用好它让你的构建流程事半功倍。
