Maven从入门到精通指南

1、什么是Maven?

Maven 是一个基于 项目对象模型(POM,Project Object Model)构建工具依赖管理工具,主要用于 Java 项目(也支持其他语言如 Scala、Kotlin 等)。它由 Apache 软件基金会维护,旨在简化项目的构建、依赖管理、文档生成和发布流程。

2、为什么使用 Maven?

传统 Java 项目的痛点

  1. 手动管理依赖:需要自己下载 JAR 文件并配置 classpath,容易出错。
  2. 构建流程不统一:不同开发者可能使用不同的构建方式(如 Ant、手动编译)。
  3. 项目结构混乱:没有统一标准,导致协作困难。

Maven 的优势:

  1. 自动依赖管理(从中央仓库下载)
  2. 标准化构建命令(如 mvn clean install)
  3. 统一的项目结构(如 src/main/java 存放源码)
  4. 丰富的插件生态(测试、打包、部署等)

3、Maven的安装

maven下载地址:

Index of /dist/maven/maven-3https://archive.apache.org/dist/maven/maven-3/

maven中央仓库: https://mvnrepository.com/

4、Maven仓库种类

仓库种类包括:本地仓库、中心仓库、远程仓库(私服)。

1)本地仓库:打开Maven-conf目录下的settings.xml,可以看到localRepository的注解:Default: ${user.home}/.m2/repository,即Maven本地仓库的默认位置是系统盘下的路径;

2)中央仓库:启动Maven工程时,先通过jar包坐标在本地仓库寻找jar包,若本地没有,在联网的情况下会去中央仓库下载,未联网的情况下因找不到jar包会报错。中央仓库放置了几乎所有的开源jar包;

3)远程仓库:实际企业项目开发时,为了方便管理,且未联网的情况下也正常开发,会创建一个远程仓库,别名为私服。公司可以通过局域网从远程仓库获取jar包。远程仓库的jar包可以是本地上传的,也可以是从中央仓库下载的。

5、Maven标准目录机构

一个典型的 Maven 项目目录结构如下:

复制代码
项目根目录/
├── pom.xml                # Maven 项目配置文件
├── src/                   # 源代码和资源文件
│   ├── main/              # 主代码(编译后进入最终包)
│   │   ├── java/          # Java 源代码
│   │   ├── resources/     # 配置文件(如 .properties, .xml)
│   │   ├── webapp/        # Web 项目特有(如 JSP, HTML)
│   │   └── ...            # 其他语言(如 Kotlin 使用 kotlin/)
│   └── test/              # 测试代码(不进入最终包)
│       ├── java/          # 测试 Java 代码
│       ├── resources/     # 测试资源文件
│       └── ...            # 其他测试代码
└── target/                # 构建输出目录(编译后的 class、生成的 JAR/WAR)

src/main/java目录:核心代码部分;

src/main/resources:配置文件部分;

src/test目录:测试代码部分;

src/test/resources:测试配置文件。

src/main/webapp:页面资源,包含js、css、图片等。

6、IDEA创建Maven项目

1、打开IDEA创建Maven项目(以SpringBoot项目为例)

2、项目配置maven

3、查看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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/>
    </parent>
    <groupId>com.lw.mavendemo</groupId>
    <artifactId>maven-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>maven-demo</name>
    <description>maven-demo</description>
    <packaging>war</packaging>
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4、打开系统命令行

7、Maven常用命令

**1、mvn clean:**删除编译文件target,在导入已有的项目时,clean一下,因为每个人的开发环境不同,所以要删除掉原来的编译信息

**2、mvn compile:**编译src/main目录下的代码,结果放在target目录下;

3、 **mvn test:**不仅编译src/main下代码,也编译src/test下的代码

**4、mvn package:**不仅编译src/main下代码,也编译src/test下的代码,且打了war包或jar包

**5、mvn install:**不仅编译src/main下代码,也编译src/test下的代码,且打了war包,此外,把当前项目的jar包存在了本地仓库。

6、mvn **deploy:**将构件部署到 远程仓库(如 Nexus),需在 pom.xml 中配置<distributionManagement>。

8、Maven的生命周期

Maven 生命周期按照构建过程分为三个部分,即 清理(clean)、构建(build) 和 站点生成(site)。每个部分包含不同的阶段(phase),执行的顺序是固定的,也就是说 Maven 在执行构建时会依次运行每个阶段。

以下是 Maven 的生命周期和各个阶段的简要说明:

  1. 清理生命周期:
    a. pre-clean:在清理之前执行的动作
    b. clean:清理上一次构建生成的文件
  2. 构建生命周期:
    a. validate:验证项目是否正确并且所有必要信息都可用
    b. compile:编译项目的源代码
    c. test:测试编译后的代码
    d. package:将编译后的代码打包成可发布的格式,如 JAR、WAR 等
    e. install:将打包好的代码安装到本地仓库,方便其他项目进行依赖管理
    f. deploy:将打包好的代码部署到远程仓库,方便其他人使用
  3. 站点生命周期:
    a. pre-site:在生成站点之前执行的动作
    b. site:生成项目的站点文档
    c. post-site:在生成站点之后执行的动作,如部署站点到服务器上
    d. site-deploy:将生成的站点部署到远程服务器上

9、maven依赖管理-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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/>
    </parent>
    <groupId>com.lw.mavendemo</groupId>
    <artifactId>maven-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>maven-demo</name>
    <description>maven-demo</description>
    <packaging>war</packaging>
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.5.6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>central</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <layout>default</layout>
            <!-- 是否开启发布版构件下载 -->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!-- 是否开启快照版构件下载 -->
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

|--------------------------|----------------------------------------|
| 标签 | 作用 |
| <project> | POM 文件的根标签。 |
| <modelVersion> | 指定 POM 模型的版本(固定为 4.0.0 )。 |
| <parent> | 继承父 POM(如 Spring Boot Starter Parent)。 |
| <groupId> | 组织标识(如 com.company)。 |
| <artifactId> | 项目名称。 |
| <version> | 项目版本( SNAPSHOT 表示开发中版本)。 |
| <packaging> | 打包方式(jar/war)。 |
| <properties> | 定义变量(如 Java 版本)。 |
| <dependencies> | 声明项目依赖。 |
| <dependencyManagement> | 统一管理依赖版本(多模块项目常用)。 |
| <repositories> | 配置远程仓库地址(如阿里云镜像)。 |
| <build> | 配置构建插件(如 spring-boot-maven-plugin)。 |

相关推荐
Bullet3434 分钟前
IDEA运行Tomcat出现乱码问题解决汇总
java·经验分享·笔记·tomcat·intellij-idea
青衫客366 分钟前
创建型模式-单例模式
java·单例模式
Java永无止境7 分钟前
Web后端基础:Maven基础
java·后端·maven
-代号95277 分钟前
Maven相关问题:jna版本与ES冲突 + aop失效
elasticsearch·maven·aop·jna
大白爱琴9 分钟前
八股文——JVM
java·jvm·spring
冬天vs不冷12 分钟前
计算机基础(一):ASCll、GB2312、GBK、Unicode、UTF-32、UTF-16、UTF-8深度解析
java·开发语言
浮游本尊39 分钟前
Java学习第2天 - 面向对象编程基础
java
我叫小白菜1 小时前
【Java_EE】Spring MVC
java·spring·mvc
SimonKing1 小时前
吊打面试官系列:BeanFactory和FactoryBean的区别
java·后端·面试
FlyingBird~1 小时前
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
java·javascript·typescript