Skip to content

参考资料

先看 B 站视频快速了解,再通过文档复习,扩展(图灵官方)

视频一共 2h ,建议 2 倍速播放

【2026版Maven实战全套教程,这绝对是Maven快速入门到实战教程天花板!】https://www.bilibili.com/video/BV1gJSuBNE3k?p=17&vd_source=b6e1ca78539fba73d35a26224eac9099

Maven 教程 | 菜鸟教程

Maven 中央仓库:Maven Repository: Search/Browse/Explore

需要掌握的基本知识

  • 创建 Maven 项目
  • 项目结构
  • 坐标
  • 依赖引用
  • properties 属性配置
  • 创建基于 maven 的 web 应用
  • maven 命令
  • 依赖范围
  • 依赖的传递
  • 依赖排除和覆盖
  • 聚合工程
  • maven 继承

验证安装

mvn -v  # 应输出 Maven 版本和 Java 信息

配置 Maven 本地仓库

默认本地仓库路径:

  • Windows: C:\Users\<用户名>\.m2\repository
  • Linux/macOS: ~/.m2/repository

修改仓库位置(可选):

在 MAVEN_HOME/conf/settings.xml 中修改:

xml
<localRepository>/path/to/your/repo</localRepository>

标准 Maven 项目结构

my-first-app/
├── pom.xml           # 项目配置文件
├── src/
│   ├── main/         # 主代码
│   │   └── java/     # Java 源代码
│   └── test/         # 测试代码
│       └── java/     # 测试类

pom.xml 解读

xml
<project>
    <modelVersion>4.0.0</modelVersion>
    
    <!-- 项目坐标(唯一标识) -​->
    <groupId>com.example</groupId>      	<!-- 组织名 -​->
    <artifactId>my-first-app</artifactId>  	<!-- 项目名 -​->
    <version>1.0-SNAPSHOT</version>     	<!-- 版本号 -​->

    <!-- 项目打包方式(默认 jar ) ,可选:jar、war、pom、bundle、其他 -​->
    <packaging>jar</packaging>
    
    <!-- 定义变量,使用${version.junit}进行引用 -​->
    <properties>
    	<version.junit>x.x.x</version.junit>
    </properties>
    
    <!-- 该项目的依赖 -​-> 
    <dependencies>
        <dependency>
            <groupId>junit</groupId>    
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!-- 作用范围。默认compile,可选:compile/test/provided/runtime/system -​->
            <scope>test</scope> 		
            <optional>false</optional>	<!-- 是否传递依赖。可选 -​->
        </dependency>
    </dependencies>
    
    <!-- 在 settings.xml 或 pom.xml 中配置 -​->
    <mirror>
        <id>aliyun</id>
        <url>https://maven.aliyun.com/repository/public</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    
    <!-- 项目名称和 URL(可选) -​->
    <name>my-first-app</name>
    <url>http://www.example.com</url>
    
</project>

Maven POM


properties: 定义项目中的一些属性变量。

用于定义变量,避免重复:

xml
<properties>
    <java.version>11</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

repositories: 仓库配置。

指定远程仓库:

xml
<repositories>
    <repository>
        <id>aliyun</id>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
</repositories>

dependencyManagement: 用于管理依赖的版本,特别是在多模块项目中。

xml
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.9</version>
        </dependency>
    </dependencies>
</dependencyManagement>

继承: 通过 parent 元素,一个POM文件可以继承另一个POM文件的配置:

xml
<parent>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

聚合: 通过 modules 元素,一个 POM 文件可以管理多个子模块:

xml
<modules>
    <module>module1</module>
    <module>module2</module>
</modules>

POM 标签大全详解

标签类别说明示例/可选值是否必需
基础信息
<modelVersion>项目结构POM模型版本4.0.0
<groupId>坐标组织标识(反向域名)com.example
<artifactId>坐标项目名称my-project
<version>坐标项目版本1.0.0-SNAPSHOT
<packaging>项目类型打包格式jar/war/pom否(默认jar)
<name>元信息项目显示名称My Application
<description>元信息项目描述A demo project
<url>元信息项目主页URLhttps://example.com
依赖管理
<dependencies>依赖依赖列表容器包含多个<dependency>
<dependency>依赖单个依赖定义包含groupId等子标签可选
<scope>依赖依赖作用域compile/test/provided/runtime否(默认compile)
<optional>依赖是否可选依赖true/false否(默认false)
<exclusions>依赖排除传递性依赖包含<exclusion>列表
构建配置
<build>构建构建配置容器包含插件/资源等配置
<plugins>构建插件列表容器包含多个<plugin>
<plugin>构建单个插件定义需指定groupIdartifactId可选
<resources>构建资源文件配置定义<resource>路径
<testResources>构建测试资源文件配置类似<resources>
<finalName>构建最终打包文件名my-app
环境配置
<properties>配置自定义变量容器定义键值对
<java.version>属性Java版本变量11/17
<repositories>仓库自定义远程仓库列表包含<repository>
<pluginRepositories>仓库自定义插件仓库类似<repositories>
多模块管理
<modules>模块子模块列表包含多个<module>聚合项目需要
<parent>继承父POM引用需指定父项目坐标继承项目需要
<dependencyManagement>依赖统一管理依赖版本定义版本但不引入
<profiles>配置环境profile容器定义不同环境配置
其他信息
<licenses>法律许可证信息包含<license>
<developers>人员开发者列表包含<developer>
<contributors>人员贡献者列表类似<developers>
<issueManagement>管理问题跟踪系统定义issue系统URL

记录学习,分享技术