Maven 是一个强大的项目管理和构建工具,广泛应用于Java项目:
-
核心概念
项目对象模型 : pom.xml 是 Maven 的核心配置文件,定义项目坐标(groupId, artifactId, version)、依赖、插件、构建配置等。
约定优于配置: 默认目录结构(如 src/main/java 存放源码,src/test/java 存放测试代码),减少配置量。
生命周期与阶段:
clean(清理)、default(构建与部署)、site(文档生成)三大生命周期。
常用阶段:compile, test, package, install, deploy。执行某阶段会触发其之前的所有阶段。 -
依赖管理
坐标定位: 通过 groupId、artifactId、version 唯一标识依赖。
依赖范围 (Scope):
compile(默认,参与所有阶段)、provided(运行时由环境提供,如 Servlet API)、test(仅测试阶段)、runtime(运行时需要,如 JDBC 驱动)。
依赖传递与冲突:
依赖调解原则: 路径最近优先、声明顺序优先。
使用 exclusion 排除冲突依赖,或通过 dependencyManagement 统一版本。 -
仓库机制
本地仓库: 默认位于 ~/.m2/repository,缓存下载的依赖。
远程仓库:
中央仓库 (repo.maven.apache.org) 是默认源。
镜像仓库(如阿里云镜像)可加速访问。
私有仓库(Nexus/Artifactory)用于企业内部依赖管理。 -
多模块管理
父 POM: 使用pom 定义公共配置,子模块通过继承。
依赖管理: 父 POM 中通过统一定义版本,子模块引用时无需指定版本。
聚合模块: 通过聚合子模块,实现一键构建。 -
插件与扩展
内置插件: 如 maven-compiler-plugin(编译)、maven-surefire-plugin(测试)、maven-shade-plugin(打包包含依赖的 Fat Jar)。
自定义插件: 可绑定到生命周期阶段,扩展构建流程。
插件配置: 例如指定 JDK 版本或跳过测试:
-
常用命令
mvn clean: 清理 target 目录。
mvn compile: 编译主代码。
mvn test: 运行单元测试。
mvn package: 打包项目(JAR/WAR)。
mvn install: 安装到本地仓库。
mvn deploy: 部署到远程仓库。
mvn dependency:tree: 分析依赖树,排查冲突。 -
高级特性
Profile: 按环境(开发/生产)激活不同配置,支持条件激活(如操作系统、文件存在)。
属性替换: 使用 ${property} 引用变量,如统一版本号管理。
资源过滤: 结合 profile 动态替换配置文件中的变量。