全面了解 Apache Maven Java 领域非常重要和基础的工具
Maven是Apache提供的Java项目管理工具,通过POM模型实现项目构建自动化。核心功能包括依赖管理(自动下载jar包并解决冲突)、标准化构建生命周期(提供clean/build等标准流程)和统一项目结构。使用方式是通过pom.xml定义项目配置,执行mvn命令完成编译、测试、打包等操作。Maven采用约定优于配置原则,强制规范了src/main/java等目录结构,使项目管理更高效。其核心
一、Maven 是什么?
Apache Maven 是一个强大的项目管理和构建自动化工具。基于项目对象模型(POM, Project Object Model) 的概念,通过一小段描述信息(一个 pom.xml
文件)来管理项目的构建、报告和文档.
-
依赖管家:自动下载和管理项目所需的第三方库(JAR 包)。
-
构建工程师:一键完成编译、测试、打包、部署等一系列繁琐的构建过程。
-
项目规范员:提供了一种标准的项目结构和构建生命周期,让所有项目都“长得一样”,降低了学习和切换的成本。
-
约定大于配置(Convention over Configuration)
👉 Maven 就是一个 管理 jar 包依赖、自动化构建和项目生命周期的工具。
二、Maven 有什么作用?(核心功能)
-
依赖管理 (Dependency Management) - 最核心的作用
-
自动下载jar包:只需在
pom.xml
中声明需要什么库(例如junit
,spring-core
),Maven 会自动从远程仓库(如 Maven Central)下载这些库及其传递性依赖(即依赖的库所依赖的其他库)。 -
解决依赖冲突:Maven 能处理复杂的依赖关系,避免版本冲突。
-
-
标准化构建生命周期 (Build Lifecycle)
-
Maven 预设了三套标准的生命周期:
clean
,default
(或build
),site
。 -
每个生命周期包含一系列阶段(phase),如
compile
,test
,package
,install
,deploy
。 -
只需要执行一个命令(如
mvn package
),Maven 就会自动按顺序执行该命令之前的所有阶段,完成整个构建流程。
-
-
项目信息管理
-
通过
pom.xml
统一管理项目描述、开发者信息、版本、许可证等元数据。 -
可以方便地生成项目站点和文档。
-
-
统一的项目结构
-
Maven 约定了一个标准的目录结构。所有使用 Maven 的项目都遵循同样的布局,这让开发者能立即熟悉任何 Maven 项目。
-
三、Maven 怎么使用?(基本使用)
1. 安装 Maven
-
前往 Maven 官网 下载二进制压缩包。
-
解压到本地目录。
-
配置环境变量:
-
M2_HOME
:指向的 Maven 解压目录。 -
将
%M2_HOME%\bin
添加到PATH
环境变量中。
-
-
打开命令行,输入
mvn -v
,如果显示 Maven 版本信息,则表示安装成功。
2. 核心命令(在项目根目录下执行)
Maven 的命令格式是 mvn [plugin-name]:[goal]
,但更常用的是生命周期阶段命令。
命令 | 作用 | 说明 |
---|---|---|
mvn compile |
编译 | 编译项目主代码,生成 target/classes 目录。 |
mvn test |
运行测试 | 运行所有测试用例,使用 Surefire 插件。 |
mvn package |
打包 | 将编译后的代码打包成可分发格式,如 JAR, WAR。 |
mvn install |
安装到本地仓库 | 将打好的包安装到本地 Maven 仓库(~/.m2/repository ),供其他本地项目依赖。 |
mvn clean |
清理 | 删除 target 目录,清除上次构建的结果。 |
mvn clean package |
组合命令 | 先清理,再打包。非常常用。 |
mvn clean install |
组合命令 | 先清理,再打包,最后安装到本地仓库。 |
mvn dependency:tree |
查看依赖树 | 显示项目的全部依赖关系,用于排查依赖冲突。 |
mvn spring-boot:run |
运行Spring Boot应用 | 使用 spring-boot-maven-plugin 运行应用。 |
执行流程:当运行 mvn install
时,Maven 会按顺序执行生命周期中的所有阶段直到 install
:validate
-> compile
-> test
-> package
-> verify
-> install
四、Maven 文件目录结构介绍
Maven 使用约定优于配置的原则,定义了严格的标准目录结构。这样做的好处是,看到目录结构就知道它是 Maven 项目。
一个标准的 Maven 项目目录如下所示:
my-app/ <!-- 项目根目录 -->
├── pom.xml <!-- Maven 项目的核心配置文件 -->
├── src <!-- 源代码目录 -->
│ ├── main <!-- 主代码目录 -->
│ │ ├── java <!-- Java 源代码(包结构在此之下) -->
│ │ │ └── com
│ │ │ └── mycompany
│ │ │ └── app
│ │ │ └── App.java
│ │ └── resources <!-- 资源文件(配置文件、图片等) -->
│ │ └── application.properties
│ └── test <!-- 测试代码目录 -->
│ ├── java <!-- 测试用的 Java 源代码 -->
│ │ └── com
│ │ └── mycompany
│ │ └── app
│ │ └── AppTest.java
│ └── resources <!-- 测试用的资源文件 -->
└── target <!-- 构建输出目录(由 Maven 自动生成) -->
├── classes <!-- 编译后的 .class 文件 -->
├── test-classes <!-- 编译后的测试类 -->
├── my-app-0.0.1.jar <!-- 打包生成的 JAR 文件 -->
└── surefire-reports <!-- 测试报告 -->
核心目录说明:
-
pom.xml
:项目的“大脑”,所有配置和依赖都在这里定义。 -
src/main/java
:存放项目主要的 Java 源代码。 -
src/main/resources
:存放项目主要的资源文件,如 Spring 的applicationContext.xml
、mybatis-config.xml
、.properties
配置文件等。这些文件会被复制到target/classes
中。 -
src/test/java
:存放测试用的 Java 代码(如 JUnit 测试用例)。 -
src/test/resources
:存放测试用的资源文件。 -
target/
:由 Maven 自动创建,所有构建产生的内容(编译后的类、打包的 jar 包、测试报告等)都会放在这个目录里。执行mvn clean
会删除此目录。
五、核心:
pom.xml
文件详解
pom.xml
是 Maven 项目的核心。一个最基本的 pom.xml
如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- 模型版本,固定为 4.0.0 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目坐标 (GAV) - 项目的唯一标识 -->
<groupId>com.mycompany.app</groupId> <!-- 公司或组织域名反写 -->
<artifactId>my-app</artifactId> <!-- 项目名 -->
<version>1.0.0-SNAPSHOT</version> <!-- 版本号 (SNAPSHOT 表示快照/开发版) -->
<packaging>jar</packaging> <!-- 打包方式 (jar, war, pom等) -->
<!-- 项目属性 -->
<properties>
<maven.compiler.source>11</maven.compiler.source> <!-- Java 版本 -->
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 项目依赖 -->
<dependencies>
<!-- 一个依赖项 -->
<dependency>
<groupId>junit</groupId> <!-- 依赖的组ID -->
<artifactId>junit</artifactId><!-- 依赖的项目ID -->
<version>4.13.2</version> <!-- 依赖的版本 -->
<scope>test</scope> <!-- 依赖的作用范围 (test: 只在测试时有效) -->
</dependency>
<!-- 可以添加更多依赖 -->
</dependencies>
<!-- 构建配置 -->
<build>
<plugins>
<!-- 插件配置,例如配置 Spring Boot 的打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
</plugin>
</plugins>
</build>
</project>
总结
方面 | 描述 |
---|---|
是什么 | Java 项目的项目管理与构建自动化工具。 |
核心作用 | 1. 依赖管理 2. 标准化构建 3. 统一项目结构 |
如何使用 | 通过命令行执行生命周期命令:mvn compile , mvn test , mvn package 。 |
核心文件 | pom.xml :定义项目信息、依赖和构建配置。 |
核心目录 | src/main/java , src/main/resources , src/test/java , target/ |
-
通过 统一的目录结构 + 插件机制 + 生命周期,让项目管理更高效
更多推荐
所有评论(0)