news 2026/7/14 21:23:52

Maven 零基础完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Maven 零基础完整教程

一、先搞懂:Maven 到底解决了什么痛点?

假设你零基础写 Java 项目,会遇到 3 个经典麻烦:

  1. Jar 包地狱:要用 Spring、MySQL 驱动,得手动下载 jar,版本选错就报错;jar 之间还会冲突(A 包需要 log4j1,B 包需要 log4j2)。
  2. 项目结构混乱:有的人代码放 src,有的人新建 java 文件夹,没有统一标准。
  3. 打包、编译麻烦:编译javac、打包jar命令手动敲,项目大了极其繁琐。

Maven 定位:Java 项目构建工具 + 依赖管理工具核心两件事:✅依赖管理:只需要写配置,自动下载 jar、自动解决 jar 冲突✅项目构建:一键编译、测试、打包、部署

类比理解:前端的 npm、yarn;Python 的 pip。Maven 就是 Java 界的包管理工具。

二、Maven 核心概念(必须先看懂,不然后续一脸懵)

1. 仓库(Repository)

Maven 所有 jar 包都存放在仓库,分三类:

  1. 本地仓库:电脑本地文件夹,第一次下载 jar 会保存这里,后续项目直接复用,不用重复下载。

    默认路径:C:\Users\用户名\.m2\repository(Windows)

  2. 中央仓库:Maven 官方远程仓库,互联网默认源,全世界共用。缺点:国内访问慢。
  3. 远程仓库(私服 / 镜像)
    • 阿里云 Maven 镜像:国内加速下载(日常开发必配)
    • 公司私服:企业内部存放私有 jar

下载顺序:本地仓库 → 镜像 / 私服 → 中央仓库

2. 坐标 (GAV) — Maven 定位 Jar 的唯一标识

所有 jar 包通过 3 个参数精准找到,写在 pom.xml 中

<!-- GAV三要素 --> <groupId>组织/公司名(反向域名)</groupId> <artifactId>项目/模块名称</artifactId> <version>版本号</version>

示例 MySQL 驱动:

<groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version>

3. POM 文件(Project Object Model)

文件名固定:pom.xmlMaven 项目的核心配置文件没有 pom.xml,文件夹就不是 Maven 项目。所有依赖、打包方式、插件、项目配置全部写在这里。

4. 标准 Maven 目录结构(约定优于配置!重点)

Maven 强制一套通用目录,不用自己新建文件夹:

项目根目录 ├── pom.xml # 核心配置文件 └── src ├── main │ ├── java # 【业务源代码】.java文件 │ └── resources # 配置文件:application.properties、xml等 └── test ├── java # 【单元测试代码】 └── resources # 测试环境配置文件

约定优于配置:遵循这套结构,不用写大量配置;如果目录改名,才需要额外配置。

三、环境安装与配置(零基础实操)

1. 安装 Maven

  1. 官网下载:apache-maven 压缩包(选择二进制 bin 包)
  2. 解压到无中文、无空格路径,例:D:\software\maven
  3. 配置环境变量
    • MAVEN_HOME= maven 解压目录
    • Path 新增:%MAVEN_HOME%\bin
  4. 验证:打开 cmd 输入
mvn -v

输出版本信息 = 安装成功

2. 核心配置:settings.xml

路径:maven/conf/settings.xml(全局配置)

重点修改两处:本地仓库路径、阿里云镜像

① 修改本地仓库(可选,建议自定义)
<localRepository>D:/maven/repository</localRepository>
② 配置阿里云镜像【最重要!解决下载慢】

找到<mirrors>标签,粘贴:

<mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>

四、Maven 常用命令(cmd / 终端执行)

所有命令格式:mvn 指令必须在 pom.xml 所在文件夹执行

表格

命令作用
mvn cleanclean:清理,删除编译产生的 target 文件夹
mvn compile编译源代码,生成 class 文件,放在 target
mvn test执行 test 目录下所有单元测试
mvn package打包!生成 jar 包 /war 包(存放在 target)
mvn install打包后,把当前项目 jar 安装到本地仓库,其他项目可以引用
mvn deploy发布 jar 到远程私服(企业开发使用)

✅ 组合写法(日常高频)

# 清理+编译+打包 mvn clean package # 清理+打包+安装到本地仓库 mvn clean install

target 文件夹:Maven 所有编译、打包输出文件,不要手动修改。

五、pom.xml 详解,从零手写一个最简 pom

最简基础模板

<?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"> <modelVersion>4.0.0</modelVersion> <!-- 当前项目GAV坐标 --> <groupId>com.demo</groupId> <artifactId>maven-demo</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式:jar普通Java项目;war web项目;pom父工程 --> <packaging>jar</packaging> <!-- 项目名称(可选) --> <name>Maven入门Demo</name> <!-- ======== 依赖区域:所有需要导入的jar包写在这里 ======== --> <dependencies> <!-- 示例:mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- Junit单元测试依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <!-- scope:作用范围,test代表只在测试代码生效 --> <scope>test</scope> </dependency> </dependencies> </project>

重点标签:scope(依赖范围,面试高频)

<scope>控制 jar 什么时候生效,4 种常用值:

  1. compile(默认):编译、测试、运行都有效,绝大部分依赖
  2. test:仅单元测试有效,打包不会带入(junit)
  3. provided:编译测试有效,运行时容器提供(例如 servlet-api,tomcat 自带)
  4. runtime:编译无效,运行、测试有效(mysql 驱动)

六、依赖冲突(Maven 最常见问题,架构师重点)

冲突场景

项目 A 引入 log4j1,项目 B 引入 log4j2,两个版本 jar 同时存在,程序直接报错。

Maven 自动调解规则(就近优先)

  1. 路径最短优先:直接引入的包 > 间接传递依赖包
  2. 先声明优先:路径一样,pom.xml 写在前面的版本生效

手动解决冲突

使用<exclusions>排除不需要的传递依赖

<dependency> <groupId>org.springframeword</groupId> <artifactId>spring-core</artifactId> <version>5.3.20</version> <!-- 排除内部自动携带的冲突jar --> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency>

IDEA 查看依赖树

命令查看依赖树:

mvn dependency:tree

可以直观看到所有传递进来的 jar 包,定位冲突。

七、IDEA 整合 Maven(开发必用)

  1. IDEA 新建项目 → 选择 Maven
  2. File → Settings → Build,Execution → Build Tools → Maven
    • Maven home path:选择自己安装的 maven(不要用 IDEA 自带)
    • User settings file:勾选,选择自己的settings.xml
  3. 右侧 Maven 面板,可以直接点击 clean、package 等按钮,不用敲命令

重要提示

修改 pom.xml 后,刷新 Maven 按钮,IDEA 才会自动下载依赖。

八、SNAPSHOT 和 Release 版本区分

  • 1.0-SNAPSHOT:快照版本,开发测试版本,随时更新
  • 1.0:Release 正式稳定版,不会变动企业规范:开发用 Snapshot,上线发布使用 Release

九、高级概念快速预习(零基础先了解,后续进阶)

  1. 父工程 pom(pom 打包):多模块项目统一管理版本,统一定义依赖,避免每个子模块重复写版本号(SpringBoot 底层大量使用)
  2. dependencyManagement:统一管理依赖版本,子模块引入时不用写 version
  3. 多模块项目:大型项目拆分成多个 module(微服务常用)
  4. Maven 插件:编译插件、打包插件、springboot 打包插件spring-boot-maven-plugin

十、零基础入门实操路线(建议跟着动手)

  1. 安装 Maven,配置 settings.xml 阿里云镜像
  2. 手动创建标准 maven 目录结构,新建 pom.xml
  3. 在 dependencies 添加 mysql 依赖
  4. 执行mvn clean compile观察自动下载 jar
  5. 编写简单 Java 代码测试,执行mvn package打包
  6. 导入 IDEA,尝试新增依赖、观察依赖树

常见新手坑总结

  1. pom.xml 路径有中文、空格 → 下载异常
  2. 没配置阿里云镜像 → jar 下载卡住、失败
  3. 命令执行位置不对,不在 pom 同级目录运行 mvn 指令
  4. 依赖 GAV 坐标写错,大小写、名字错误,找不到 jar
  5. 依赖冲突导致启动报错,不会使用 dependency:tree 排查
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 21:19:25

如何5分钟搞定OBS多平台直播:obs-multi-rtmp完全指南

如何5分钟搞定OBS多平台直播&#xff1a;obs-multi-rtmp完全指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 还在为每次只能直播到一个平台而烦恼吗&#xff1f;想要同时覆盖YouTub…

作者头像 李华
网站建设 2026/7/14 21:16:27

MIC1557与PIC18LF4685构建高精度低功耗定时系统

1. 为什么选择MIC1557PIC18LF4685组合构建定时系统在工业控制和仪器仪表领域&#xff0c;定时系统的可靠性直接关系到整个设备的运行稳定性。MIC1557作为一款经典的定时器芯片&#xff0c;与PIC18LF4685微控制器的组合&#xff0c;已经成为许多工程师构建高精度定时系统的首选方…

作者头像 李华
网站建设 2026/7/14 21:15:10

SpringCloud - Nacos 与 K8s 优雅停机实战:从原理到配置的完整避坑指南

1. 优雅停机问题的本质与核心挑战在Kubernetes环境中进行SpringCloud微服务滚动更新时&#xff0c;最让人头疼的就是那1%的请求失败率。想象一下这样的场景&#xff1a;凌晨三点进行生产环境发布&#xff0c;监控大盘突然跳出500错误告警&#xff0c;虽然比例不高但足以让运维团…

作者头像 李华
网站建设 2026/7/14 21:14:57

【数据挖掘】核心算法实战精讲:从理论到应用

1. 数据挖掘入门&#xff1a;从超市购物车到算法原理第一次听说"数据挖掘"这个词时&#xff0c;我正站在超市收银台前排队。收银员扫描完商品后&#xff0c;屏幕上突然跳出"购买这些商品的顾客还买了..."的提示。那一刻我突然意识到&#xff0c;原来我们每…

作者头像 李华
网站建设 2026/7/14 21:14:47

ADC32RF5x射频采样接收机设计:从架构到寄存器配置全解析

1. 项目概述与核心价值在雷达、电子侦察、卫星通信以及高端测试测量领域&#xff0c;我们常常面临一个共同的挑战&#xff1a;如何以极高的保真度捕获和分析瞬息万变的宽带射频信号。传统的超外差接收机架构虽然成熟&#xff0c;但需要复杂的混频器、本振和滤波器链路&#xff…

作者头像 李华
网站建设 2026/7/14 21:14:36

解决UE5源码编译中VS2022 NuGet漏洞警告的三种方法

1. 项目概述&#xff1a;当UE5源码编译遇上VS2022的“安全卫士” 如果你正在尝试从源码编译虚幻引擎5&#xff08;UE5&#xff09;&#xff0c;并且恰好使用的是Visual Studio 2022作为你的主力IDE&#xff0c;那么你大概率会在编译过程的某个环节&#xff0c;看到一个令人心头…

作者头像 李华