什么是Maven?关于 Maven 的标准化结构、配置与项目创建
目录
一、什么是Maven?
1.提供标准化的项目结构(约定大于配置)
2.提供自动化的标准构建流程
3.提供统一的依赖管理机制
二、关于下载配置
1.下载安装
2.修改本地仓库与镜像
3.配置环境变量
三、是否需要手动安装 & 配置 Maven
1.不需要手动安装 Maven 的情况
2.需要手动安装 Maven 的情况
四、用mvn命令创建项目骨架
五、基于 IDEA 的 Maven工程创建
Maven 的“约定大于配置(Convention over Configuration)”理念
1.项目结构的约定:
2.构建生命周期的约定
3. 插件和命令的默认行为
一、什么是Maven?
Maven 是一个基于 Java 的项目管理与构建工具。
它不仅可以定义项目的结构与依赖,还能通过统一的方式实现自动化构建,是现代 Java 项目开发中不可或缺的基础工具。
Maven 主要提供以下三方面的能力
1.提供标准化的项目结构(约定大于配置)
在没有 Maven 之前,不同的开发工具、团队往往会使用不同的项目目录结构,导致新成员接手项目时常常需要重新熟悉结构,增加了协作成本。
Maven 通过一套标准的目录结构约定,让所有项目遵循统一的规范。
2.提供自动化的标准构建流程
传统的项目部署流程通常比较繁琐,比如一个 Web 项目可能需要:
手动编译 → 手动运行测试 → 手动打包 (war/jar) → 手动上传部署
每个步骤都需要人为干预,容易出错,也难以统一。
Maven 则定义了 标准化的构建生命周期,只需一条命令:
mvn clean package
Maven 会自动按以下流程执行:
编译(compile ) 测试(test) 打包(package) 部署(deploy)
甚至可以与 Tomcat 或远程服务器结合,实现 一键自动化部署,极大地简化了项目发布流程,提高效率。
3.提供统一的依赖管理机制
在传统项目中,如果要使用第三方库,就必须手动下载 .jar 文件,复制到项目目录中。
当项目依赖变多时,不仅体积庞大、占磁盘,还容易出现版本冲突与依赖缺失等问题。
Maven 引入了「仓库 + 依赖管理机制」来解决这一痛点:
所有第三方依赖都从 中央仓库/镜像仓库 自动下载,不再需要手动管理 jar 包。
通过在 pom.xml 中声明 <dependency>,Maven 会自动:
下载指定版本的依赖;
解析其依赖的其他 jar(依赖传递);
统一管理依赖版本,减少冲突。
这样一来,项目体积更轻,团队协作也不需要再传输一堆 jar 包,版本管理更清晰。
二、关于下载配置
1.下载安装
Maven下载地址:
Download Apache Maven – Maven
选择 Binary zip 版本(例如 apache-maven-3.8.8-bin.zip),解压至任意目录。
找到解压缩后的文件:
找到:
打开:
2.修改本地仓库与镜像
修改默认的仓库(用自己需要的仓库存储jar包):
同时,配置多个国内 Maven 镜像,加速依赖下载。
由于本地仓库初始状态并不包含所有构建所需的 jar 包,
Maven 会在首次构建时从远程仓库拉取依赖。
如果不配置镜像,默认会从 Maven 官方中央仓库下载,速度较慢甚至可能超时。
通过设置阿里云、华为云、腾讯云等镜像,可以显著提升下载速度和构建效率。
<!-- 阿里云镜像 --><mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>Aliyun Maven Central Mirror</name><url>https://maven.aliyun.com/repository/public</url></mirror><!-- 华为云镜像 --><mirror><id>huaweicloud</id><mirrorOf>central</mirrorOf><name>Huawei Cloud Maven Central Mirror</name><url>https://repo.huaweicloud.com/repository/maven/</url></mirror><!-- 腾讯云镜像 --><mirror><id>tencent</id><mirrorOf>central</mirrorOf><name>Tencent Cloud Maven Central Mirror</name><url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url></mirror>
3.配置环境变量
设置MAVEN_HOME为Maven根目录
将MAVEN_HOME/bin 加入 Path
打开一个新的命令行,执行:
mvn -v
输出:
出现版本信息就表示配置成功了
在IntelliJ IDEA中,找到「Settings → Build, Execution, Deployment → Build Tools → Maven」
同时选择配置好的setting的文件
三、是否需要手动安装 & 配置 Maven
在使用 IntelliJ IDEA 开发 Java 项目时,IDEA 本身自带了一个 Maven 版本,通常位于 IDEA 的安装目录下,例如:
D:\Web\Ideal\IntelliJ IDEA 2024.2.4\plugins\maven\lib\maven3
也就是说,即使你本地系统没有单独安装 Maven,IDEA 也可以直接使用内置 Maven 来执行构建、依赖下载、打包等操作。
对于大多数初学者或中小型项目而言,直接使用 IDEA 自带的 Maven 完全可以满足开发需求,无需额外手动安装和配置环境变量。
1.不需要手动安装 Maven 的情况
使用 IDEA 开发普通 Java / Spring Boot 项目;
仅在本地进行开发、调试、打包;
对 Maven 版本没有特殊要求;
团队统一使用 IDEA 内置 Maven。
在这种场景下,你只需要在 IDEA 的
Settings → Build, Execution, Deployment → Build Tools → Maven
中确认 Maven home path 使用的是默认的内置路径即可:
2.需要手动安装 Maven 的情况
在以下场景中,建议手动下载、安装 Maven 并配置环境变量:
1.需要在命令行(cmd / PowerShell / Terminal)中使用 Maven 命令,例如:
mvn clean installmvn package
这时必须让系统知道 Maven 的位置。
2.项目对 Maven 版本有特定要求,而 IDEA 自带的版本无法满足。
3.企业或团队内部要求统一使用某个指定版本的 Maven,例如 CI/CD 流程中使用的版本。
4.需要自定义 Maven 配置(如本地仓库位置、镜像源、全局 settings.xml),而不希望修改 IDEA 内置 Maven 目录。
四、用mvn命令创建项目骨架
通过 Maven Archetype 可以快速生成标准项目结构:
mvn archetype:generate
这个命令是通过已有的项目模板(Archetype),快速生成一个标准结构的 Maven 项目骨架。
打开想要创建项目的文件,运行上述命令:
当执行mvn archetype:generate 命令时,Maven 首先会从远程仓库(如中央仓库或镜像)下载 archetype 插件,然后下载对应的 项目模板(archetype),最后还会下载模板中定义的依赖。所有下载的内容都会缓存在本地仓库中,以便后续项目创建或构建时重复利用。这就是为什么第一次执行这个命令时会看到大量的下载日志。
下载完成后点击回车,输入项目的groupId: com.ma
然后输入artifactId:hello
默认版本为1.0-SNAPSHOT,包名为com.ma,此时输入Y,使用这些配置继续生成项目骨架
生成的结构如下:
hello
├── pom.xml
└── src├── main│ └── java│ └── com│ └── ma│ └── App.java└── test└── java└── com└── ma└── AppTest.java
并且在pom.xml里会有:
<groupId>com.ma</groupId>
<artifactId>hello</artifactId>
<version>1.0-SNAPSHOT</version>
小提示:
Define value for property 'package': com.ma
这里的 package 指的是 项目的基础包名,它会决定生成项目时的 Java 代码所在的包结构比如输入:com.ma
生成的目录结构会是:
src└─ main└─ java└─ com└─ ma└─ App.java(默认生成的类)
同时,生成的类文件里也会自动加上:
package com.ma;/*** Hello world!*/ public class App {public static void main(String[] args) {System.out.println("Hello World!");} }
很多时候 package 会和 groupId 保持一致,比如:
groupId: com.ma artifactId: hello package: com.ma
因为这样生成的代码包结构、依赖坐标就能保持统一和清晰。
当然,也可以单独指定一个不同的包名,比如:
groupId: com.ma.project package: com.ma.web.api
这种情况在多模块项目中比较常见。
五、基于 IDEA 的 Maven工程创建
首先,我们 new 一个 project
在这里就需要提到一个常听到的概念:
Maven 的“约定大于配置(Convention over Configuration)”理念
定义:
Maven 通过一套“统一的项目结构、默认的构建生命周期和插件行为”,在不写或少写配置的情况下,项目就能完成构建、测试、打包等工作。
只要遵守 Maven 的约定目录结构和命名规则,就不需要额外配置。
这大大减少了 XML 配置的复杂度。
1.项目结构的约定:
只要你把源代码、资源文件放在这几个位置,Maven 就自动识别,不需要额外配置编译路径、资源路径等。
2.构建生命周期的约定
Maven 提供了默认的生命周期,比如 compile、test、package、install 等。
执行 mvn package 时,Maven 会自动按以下顺序执行:
validate → compile → test → package
不需要去写每个阶段该做什么,Maven 已经约定好:
compile:编译 src/main/java
test:运行 src/test/java 的测试
package:把编译结果打包成 jar/war
3. 插件和命令的默认行为
例如,Maven 的 maven-compiler-plugin 插件默认就会编译 src/main/java。
除非有特别的路径或版本要求,否则不需要在 pom.xml 中额外配置。
“约定大于配置” 就是:遵守 Maven 的标准,Maven 就帮你做好大部分事,你只在“有特殊需求”时才去改配置。