Maven 详解
一、基础概念
-
Maven简介
• Apache 开源项目管理工具,用于 项目构建、依赖管理 和 标准化开发流程。
• 基于 POM(Project Object Model) 模型,通过坐标管理依赖,支持中央仓库和本地仓库机制。 -
核心功能
• 依赖管理:自动下载和管理第三方库,解决版本冲突。
• 构建生命周期:标准化编译、测试、打包、部署流程。
• 多模块管理:支持聚合项目,统一管理子模块依赖。
二、安装与配置
-
下载安装
• 官网下载地址:https://maven.apache.org/
• 解压后配置环境变量:# 配置 JAVA_HOME export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # 配置 MAVEN_HOME export MAVEN_HOME=/opt/apache-maven-3.9.6 # 添加至 PATH export PATH=$PATH:$MAVEN_HOME/bin
-
本地仓库配置
• 修改conf/settings.xml
,指定本地仓库路径:<localRepository>/path/to/local/repo</localRepository>
-
镜像加速
• 修改settings.xml
,添加阿里云镜像:<mirror> <id>aliyun</id> <name>Aliyun Maven Mirror</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror>
三、核心概念详解
-
坐标(Coordinates)
• 唯一标识资源位置,包含以下元素:元素 说明 示例 groupId
组织或项目唯一标识(反向域名) org.apache.maven
artifactId
模块名称 maven-core
version
版本号 3.9.6
packaging
打包类型( jar
/war
/pom
)jar
classifier
区分构建变体(如 sources
、javadoc
)sources
• 示例:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>
-
依赖范围(Scope)
• 控制依赖的生效范围:Scope 说明 示例场景 compile
默认范围,参与编译、测试、运行 Spring Core test
仅参与测试阶段 JUnit provided
编译和测试有效,运行时由容器提供 Servlet API runtime
编译不参与,运行和测试需要 JDBC 驱动
四、项目结构与POM文件
-
标准项目结构
my-project/ ├── src/ │ ├── main/ │ │ ├── java/ # 源码目录 │ │ └── resources/ # 配置文件 │ └── test/ │ ├── java/ # 测试代码 │ └── resources/ # 测试配置 └── pom.xml # 项目对象模型
-
POM文件解析
• 基本结构:<project> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-app</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <dependencies>...</dependencies> <build>...</build> </project>
• 多模块管理:
<!-- 父POM --> <packaging>pom</packaging> <modules> <module>module1</module> <module>module2</module> </modules>
五、依赖管理与构建命令
-
依赖管理(Dependency Management)
• 统一版本控制:<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.1.5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
-
常用构建命令
命令 作用 mvn clean
清理target目录 mvn compile
编译源代码 mvn test
运行单元测试 mvn package
打包项目(生成jar/war) mvn install
安装到本地仓库 mvn deploy
部署到远程仓库
六、高级配置
-
Profile多环境配置
<profiles> <profile> <id>dev</id> <properties> <env>development</env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
-
插件配置(Plugin)
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build>
七、私服(Nexus)
-
私服作用
• 企业内部私有仓库,缓存中央仓库依赖,加速构建。
• 管理内部私有组件,如公司内部工具包。 -
配置私服
• 在settings.xml
中配置镜像:<mirror> <id>nexus</id> <name>Internal Nexus</name> <url>http://nexus.example.com/repository/maven-public/</url> <mirrorOf>*</mirrorOf> </mirror>
八、常见问题
-
依赖冲突
• 解决方式:
◦ 使用mvn dependency:tree
查看依赖树。
◦ 通过<exclusions>
排除冲突依赖。 -
构建缓慢
• 优化方案:
◦ 配置镜像仓库。
◦ 使用-T 1C
参数开启多线程构建。
总结:Maven通过标准化项目结构和依赖管理,极大提升了Java项目的开发效率。掌握核心概念(坐标、依赖范围、生命周期)和高级特性(多模块、Profile),能够有效应对复杂项目需求。