Maven 基础
约 876 字大约 3 分钟
布欧-Lewyon
2026-05-15
Maven 是 Java 生态中使用最广泛的构建工具。它通过一个 pom.xml 文件管理项目的构建生命周期、依赖声明和插件配置,约定优于配置。
安装与验证
Maven 依赖 JDK,安装后验证:
mvn --version输出应显示 Maven 版本、Java 版本和操作系统信息。若提示命令未找到,检查 MAVEN_HOME 或 PATH 配置。
POM 结构
pom.xml(Project Object Model)是 Maven 项目的核心配置文件。最小化的 POM 如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
</project>三个必要坐标 groupId、artifactId、version 唯一标识一个项目,也是 Maven 仓库中的定位依据。
坐标与仓库
坐标(GAV):
| 元素 | 含义 | 示例 |
|---|---|---|
groupId | 组织/项目包名 | com.example |
artifactId | 模块名 | my-app |
version | 版本号 | 1.0.0 |
仓库:Maven 从仓库下载依赖。默认远程仓库是 Maven Central(repo.maven.apache.org),本地缓存位于 ~/.m2/repository。如果依赖已存在于本地,无需重复下载。
依赖管理
在 <dependencies> 中声明项目依赖的第三方库:
<dependencies>
<!-- JUnit 5 测试依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<!-- SLF4J 日志门面 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>scope(作用域)
| scope | 编译 | 测试 | 运行 | 示例 |
|---|---|---|---|---|
compile(默认) | ✅ | ✅ | ✅ | 核心库 |
test | ❌ | ✅ | ❌ | JUnit |
provided | ✅ | ✅ | ❌ | Servlet API(容器提供) |
runtime | ❌ | ✅ | ✅ | JDBC 驱动 |
标准目录结构
Maven 强制约定目录结构(遵守即可,无需配置):
my-app/
├── pom.xml
└── src/
├── main/
│ ├── java/ # 生产代码
│ └── resources/ # 配置文件
└── test/
├── java/ # 测试代码
└── resources/ # 测试配置常用生命周期命令
Maven 有三个内置生命周期:clean(清理)、default(构建主流程)、site(站点生成)。default 生命周期按顺序执行以下阶段:
| 阶段 | 作用 |
|---|---|
validate | 验证 POM 合法性 |
compile | 编译 src/main/java |
test | 运行测试(使用 test scope 的依赖) |
package | 打包为 JAR/WAR |
verify | 运行集成测试检查 |
install | 安装到本地仓库(供其他模块引用) |
deploy | 部署到远程仓库 |
mvn clean # 清理 target/
mvn compile # 编译
mvn test # 运行测试
mvn package # 打包
mvn clean install # 清理 + 编译 + 测试 + 安装执行 mvn package 时,Maven 会依次执行 compile → test → package(前面的阶段自动执行)。
常用插件
插件在 pom.xml 的 <build><plugins> 中配置。以下为 Java 编译版本和打可执行 JAR 的典型配置:
<build>
<plugins>
<!-- 指定 JDK 编译版本 -->
<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>
<!-- 打可执行 JAR(含依赖) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>小结
- Maven 通过
pom.xml管理构建生命周期、依赖坐标和插件配置。 - 坐标
groupId:artifactId:version唯一标识项目,依赖按scope区分作用域。 - 约定目录结构:
src/main/java→ 生产代码,src/test/java→ 测试代码。 - default 生命周期按序执行 validate → compile → test → package → install → deploy。
- 易错:依赖版本冲突时 Maven 采用"最短路径优先",可通过
mvn dependency:tree查看实际使用的版本;provided和testscope 的依赖不会被打入 JAR。 - 思考任务:执行
mvn archetype:generate创建一个简单的 Maven 项目,查看生成的pom.xml和目录结构。
上一节:类加载与反射
下一节:Maven 进阶
