0%

maven简介

Maven 全面解析:从基础概念到项目管理实践

Maven 作为 Java 生态中主流的项目管理工具,通过标准化的项目结构、依赖管理和构建流程,极大简化了项目的开发与维护。本文将从 Maven 的核心概念、项目构建、目录结构、依赖管理等方面进行全面讲解,帮助你快速掌握 Maven 的使用。

Maven 核心概念

项目对象模型(POM)

Maven 基于 Project Object Model(POM) 管理项目,所有配置都集中在 pom.xml 文件中。POM 定义了项目的基本信息(如坐标、名称)、依赖、插件、构建规则等,是 Maven 项目的 “灵魂”。

一个简单的 pom.xml 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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.zhanghe</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <!-- 打包方式:jar/war/pom 等 -->

<name>test</name>
<description>A simple Maven project</description>
</project>

所有的pom都继承自一个父POM,其中包含了一些可以被继承的默认设置

1
2
# 查看父pom的默认配置
mvn help:effctive-pom

依赖管理

Maven 通过坐标唯一标识并管理依赖(如第三方 Jar 包),避免手动下载和导入 Jar 包的繁琐。坐标由以下 4 个元素组成:

元素 含义 示例
groupId 组织 / 公司标识(通常为域名倒序) com.zhangheorg.springframework
artifactId 项目 / 模块标识 testspring-core
version 版本号(SNAPSHOT 表示快照版,RELEASE 表示稳定版) 1.0-SNAPSHOT5.3.20.RELEASE
packaging 打包方式(默认 jar,Web 项目用 war jarwar

示例:在 pom.xml 中添加 Spring 依赖:

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20.RELEASE</version>
</dependency>
</dependencies>

仓库(Repository)

Maven 仓库用于存储依赖包,按存储位置分为三类:

(1)本地仓库
  • 位于本地计算机的目录(默认 ~/.m2/repository),用于缓存从远程仓库下载的依赖。

  • 可在 Maven 配置文件settings.xml中自定义路径:

    1
    <localRepository>/path/to/your/local/repo</localRepository>
(2)远程仓库
  • 私服:公司 / 团队内部搭建的仓库(如 Nexus),用于管理内部依赖,避免重复下载。
  • 第三方仓库:如阿里云、JBoss 等提供的公共仓库,补充中央仓库的不足。

pom.xml 中配置远程仓库:

1
2
3
4
5
6
7
8
9
<repositories>
<repository>
<id>aliyun</id>
<name>Aliyun Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases><enabled>true</enabled></releases> <!-- 允许下载正式版 -->
<snapshots><enabled>true</enabled></snapshots> <!-- 允许下载快照版 -->
</repository>
</repositories>
(3)中央仓库
  • Maven 官方维护的仓库(https://repo.maven.apache.org/maven2),包含绝大多数开源依赖。
  • 无需手动配置,Maven 会默认从中央仓库下载依赖(若本地和远程仓库无对应依赖)。
依赖搜索顺序

Maven 查找依赖时,按以下顺序依次检索:

  1. 本地仓库 → 2. 项目 pom.xml 配置的远程仓库 → 3. 私服 → 4. 中央仓库

Maven 项目构建

使用命令创建项目

通过 mvn archetype:generate 命令基于骨架(Archetype) 快速创建项目:

(1)创建普通 Java 项目
1
2
3
4
5
6
mvn archetype:generate \
-DgroupId=com.zhanghe \ # 组织标识
-DartifactId=test \ # 项目名称
-DarchetypeArtifactId=maven-archetype-quickstart \ # 骨架类型
-Dversion=1.0-SNAPSHOT \ # 版本号
-DinteractiveMode=false # 非交互模式(无需手动确认)
(2)创建 Web 项目
1
2
3
4
5
6
mvn archetype:generate \
-DgroupId=com.zhanghe \
-DartifactId=web-demo \
-DarchetypeArtifactId=maven-archetype-webapp \ # Web 项目骨架
-Dversion=1.0-SNAPSHOT \
-DinteractiveMode=false

标准项目目录结构

Maven 定义了统一的目录结构,确保项目的一致性和可维护性:

1
2
3
4
5
6
7
8
9
10
11
test-project/                # 项目根目录
├── pom.xml # POM 配置文件
├── src/
│ ├── main/ # 主程序代码
│ │ ├── java/ # Java 源代码(包结构在此目录下)
│ │ ├── resources/ # 资源文件(如配置文件、静态资源)
│ │ └── webapp/ # Web 项目特有(JSP、CSS、JS 等,对应 WAR 包根目录)
│ └── test/ # 测试代码
│ ├── java/ # 测试类(如 JUnit 测试)
│ └── resources/ # 测试资源文件
└── target/ # 构建输出目录(自动生成,包含 class、Jar/WAR 包等)
自定义目录结构

若需修改默认目录(如源码路径),可在 pom.xml<build> 中配置:

1
2
3
4
5
6
7
8
<build>
<sourceDirectory>src/main/custom-java</sourceDirectory> <!-- 自定义源码目录 -->
<resources>
<resource>
<directory>src/main/custom-resources</directory> <!-- 自定义资源目录 -->
</resource>
</resources>
</build>

核心配置与属性

全局属性配置

pom.xml<properties> 中定义属性,可简化版本管理和配置复用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<properties>
<!-- 编码格式 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- JDK 版本 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- 依赖版本(复用) -->
<spring.version>5.3.20.RELEASE</spring.version>
</properties>

<!-- 使用属性 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version> <!-- 引用属性 -->
</dependency>
</dependencies>

插件配置

Maven 通过插件实现构建功能(如编译、打包、测试),插件配置在 <build><plugins> 中:

示例:配置编译插件(指定 JDK 版本):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source> <!-- 源码兼容版本 -->
<target>1.8</target> <!-- 编译后 class 兼容版本 -->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

镜像配置(加速依赖下载)

中央仓库在国外,下载速度慢,可配置国内镜像(如阿里云)加速:

在 Maven 全局配置文件 settings.xml(位于 ~/.m2/settings.xmlMAVEN_HOME/conf/settings.xml)中添加:

1
2
3
4
5
6
7
8
<mirrors>
<mirror>
<id>aliyun-maven</id>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf> <!-- 镜像中央仓库 -->
</mirror>
</mirrors>

常用 Maven 命令

命令 功能描述
mvn clean 清理 target 目录(删除编译生成的文件)
mvn compile 编译主程序代码(生成 target/classes
mvn test 运行测试用例(需先编译,生成 target/test-classes
mvn package 打包项目(生成 Jar/WAR 包到 target 目录)
mvn install 将项目安装到本地仓库(供其他项目依赖)
mvn deploy 将项目部署到远程仓库(如私服)
mvn archetype:generate 创建新 Maven 项目(基于骨架)
mvn help:effective-pom 查看当前项目的有效 POM(包含继承的配置)

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10