当前位置: 代码网 > it编程>编程语言>Java > Maven工具新手教学:一篇文章搞懂Java项目构建与依赖管理

Maven工具新手教学:一篇文章搞懂Java项目构建与依赖管理

2026年09月22日 Java 我要评论
如果你刚开始接触 java 后端开发,经常会看到:mvn cleanmvn installmvn packagemvn test项目里还经常有一个:pom.xml很多初学者的第一反应是:maven 不

如果你刚开始接触 java 后端开发,经常会看到:

mvn clean
mvn install
mvn package
mvn test

项目里还经常有一个:

pom.xml

很多初学者的第一反应是:maven 不就是一个 java 的包管理工具吗?

其实不完全是。

maven 更准确地说,是一个 java 项目的构建与项目管理工具。

它主要帮助我们解决:

  • 项目怎么编译
  • 测试怎么运行
  • 依赖怎么管理
  • 项目怎么打包
  • 多模块项目怎么组织
  • 构建过程怎么标准化

apache maven 官方也将它定位为用于 java 项目构建和管理的工具,并通过 pom 和插件定义项目的构建过程。

一、没有 maven 的时候,我们需要做什么?

假设我们有一个 java 项目:

src/
 └── main.java

我们想运行它,大概需要经历:

java 源代码
    ↓
javac 编译
    ↓
.class 文件
    ↓
运行

但真实项目很快就复杂起来了。

比如我们的项目需要:

spring
mysql driver
mybatis
jackson
lombok
junit
...

那么问题来了:

这些 jar 包从哪里下载?
jar 包之间还有依赖关系怎么办?
项目怎么编译?
测试怎么执行?
最后怎么打包成 jar?

如果全部手工处理,会非常麻烦。

maven 就是用来解决这一系列问题的。

二、maven 最核心的三个东西

入门 maven,可以先记住三个概念:

pom、repository、lifecycle。

可以简单理解成:

pom
 ↓
告诉 maven:项目是什么、依赖什么
repository
 ↓
告诉 maven:依赖从哪里获取
lifecycle
 ↓
告诉 maven:项目怎么构建

这三个概念基本贯穿 maven 的整个使用过程。

三、pom 是什么?

pom 全称:

project object model

也就是:

项目对象模型。

它通常就是项目根目录下的:pom.xml

例如:

<project>
    <groupid>com.example</groupid>
    <artifactid>demo</artifactid>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-web</artifactid>
            <version>3.5.0</version>
        </dependency>
    </dependencies>
</project>

你可以把 pom.xml 理解成:这个 java 项目的身份证 + 配置文件。

它里面可以描述:

项目叫什么
项目版本是多少
使用什么 java 版本
依赖哪些第三方库
使用哪些插件
怎么打包
父项目是谁
有哪些子模块

所以看到一个 maven 项目,第一件事通常就是:打开 pom.xml

四、dependency 是 maven 最常见的配置

例如:

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
    <version>3.5.0</version>
</dependency>

它表示:我的项目需要 spring-boot-starter-web 这个依赖。

这里有三个特别重要的字段。

groupid

表示组织或者项目所属的组织:

<groupid>org.springframework.boot</groupid>

可以理解成:哪个公司 / 哪个组织

artifactid

表示具体的项目或者组件:

<artifactid>spring-boot-starter-web</artifactid>

可以理解成:具体使用哪个库

version

表示版本:

<version>3.5.0</version>

也就是:使用哪个版本

所以:

groupid
+
artifactid
+
version

基本可以唯一定位一个 maven 依赖。

五、maven 为什么能够自动下载 jar?

这就涉及:

repository(仓库)

maven 世界里最重要的仓库之一是:

maven central

你在 pom.xml 中写:

<dependency>
    <groupid>xxx</groupid>
    <artifactid>xxx</artifactid>
    <version>xxx</version>
</dependency>

maven 就会根据这些信息寻找对应的依赖。

大致过程:

pom.xml
   ↓
maven
   ↓
查找依赖
   ↓
远程仓库
   ↓
下载 jar
   ↓
本地仓库
   ↓
项目使用

六、什么是本地仓库?

第一次使用某个依赖时,maven 通常会从远程仓库下载。

下载之后,会缓存到本地。

例如 windows 用户通常可以在:

c:\users\用户名.m2\repository

看到 maven 的本地仓库。

里面可能有:

.m2
└── repository
    └── org
        └── springframework
            └── ...

所以第二次构建项目时,如果本地已经存在对应版本:

maven
 ↓
本地仓库有
 ↓
直接使用

就不需要每次重新下载。

七、maven 最厉害的地方:传递依赖

假设你的项目依赖:a

但是 a 又依赖:b

b 又依赖:c

传统方式可能需要你自己一个一个下载:

a
b
c

而 maven 可以自动处理:

你的项目
   ↓
a
   ↓
b
   ↓
c

这就是:

传递依赖(transitive dependencies)。

所以你只需要声明自己直接需要的依赖,maven 会根据依赖关系继续解析。

这也是 maven 依赖管理非常重要的能力之一。

八、maven 的标准项目结构

maven 最大的特点之一,就是:

约定优于配置。

一个标准 maven 项目通常是:

demo
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   └── resources
    │
    └── test
        ├── java
        └── resources

其中:

src/main/java

放业务代码。

src/main/resources

放配置文件、资源文件。

src/test/java

放测试代码。

官方 maven getting started guide 也采用这一标准目录结构。

这样做有什么好处?

当你进入一个陌生的 maven 项目时,不需要重新学习它的目录结构。

看到:

src/main/java

基本就知道:java 源代码在这里。

这就是 maven 的:

约定优于配置。

九、maven lifecycle 是什么?

这是 maven 初学者最容易混淆的地方。

经常看到:

mvn clean
mvn compile
mvn test
mvn package
mvn install

这些到底是什么?

可以先简单理解成:maven 定义了一套标准的项目构建生命周期。

例如:

validate
   ↓
compile
   ↓
test
   ↓
package
   ↓
verify
   ↓
install
   ↓
deploy

它们代表不同阶段。

十、几个最常用的 maven 命令

1. clean

mvn clean

主要用于清理之前的构建结果。

例如:

target/

通常会被删除。

可以理解成:把之前编译产生的东西清理掉。

2. compile

mvn compile

编译项目代码。

大概就是:

.java
 ↓
.class

3. test

mvn test

编译并运行测试。

4. package

mvn package

将项目打包。

例如:

target/demo-1.0.0.jar

或者 web 项目可能生成:

xxx.war

5. install

mvn install

它不仅会构建项目,还会把生成的构件安装到本地 maven 仓库。

可以理解成:

项目
 ↓
编译
 ↓
测试
 ↓
打包
 ↓
安装到 ~/.m2/repository

这样其他本地 maven 项目就可以引用它。

十一、为什么执行 package 会自动编译和测试?

比如你执行:

mvn package

你可能会发现:

compile
test
package

都执行了。

为什么?

因为 maven 的生命周期阶段是有顺序的。

你执行:

mvn package

相当于告诉 maven:把项目构建到 package 阶段。

那么 package 前面的必要阶段也会执行。

所以:

mvn package

通常不需要你再手动执行:

mvn compile
mvn test

十二、plugin 又是什么?

maven 本身并不是把所有事情都硬编码进去。

它大量依赖:

plugin(插件)。

例如:

编译
测试
打包
生成文档
代码检查
发布

很多能力都是通过插件完成的。

可以简单理解:

maven
  ↓
生命周期
  ↓
插件
  ↓
具体执行任务

例如编译 java:

maven compiler plugin

执行测试:

maven surefire plugin

所以 maven 可以理解成一个:围绕生命周期、插件和项目模型组织起来的构建系统。

十三、maven 和 npm 有什么区别?

如果你做过前端,这个对理解 maven 非常有帮助。

前端:

package.json
      ↓
npm install
      ↓
node_modules

java:

pom.xml
      ↓
mvn package
      ↓
~/.m2/repository

可以粗略类比:

前端java
package.jsonpom.xml
npmmaven
npm installmaven 下载依赖
node_modulesmaven 本地仓库
packagejar
npm scriptsmaven plugin / lifecycle

当然,这只是帮助理解的类比,两者的构建模型并不完全相同。

十四、maven 到底解决了什么问题?

如果把 maven 浓缩成一句话:maven 把 java 项目的构建、依赖、测试、打包和发布流程标准化了。

以前可能是:

开发人员 a
自己写构建脚本
开发人员 b
自己管理 jar
开发人员 c
自己设计项目结构

最后每个项目都不一样。

maven 希望做到:

统一项目结构
        ↓
统一依赖管理
        ↓
统一构建流程
        ↓
统一测试流程
        ↓
统一打包方式

所以当你进入一个新的 java maven 项目时,通常只需要先看:pom.xml

然后执行:

mvn clean package

就能快速理解和构建项目。

十五、初学 maven,真正需要掌握什么?

不要一开始就研究 maven 几百个配置项。

入门阶段先掌握这几个:

  • pom.xml
  • groupid / artifactid / version
  • dependency
  • repository
  • 本地仓库 ~/.m2
  • maven 生命周期
  • clean / compile / test / package / install
  • plugin
  • 传递依赖
  • maven 标准项目结构

把这几个概念搞懂,已经足够应付绝大多数日常 maven 操作。

十六、最后用一张图理解 maven

可以把 maven 想象成:

                    maven
                      │
          ┌───────────┼───────────┐
          ↓           ↓           ↓
        pom       lifecycle    repository
          │           │           │
          ↓           ↓           ↓
       依赖配置     构建流程      下载依赖
          │           │           │
          └───────────┼───────────┘
                      ↓
                  plugin
                      ↓
              编译 / 测试 / 打包
                      ↓
                  jar / war

所以 maven 并不只是:“java 的依赖管理工具。”

更准确的理解是:maven 是一个以 pom 为核心,通过依赖管理、生命周期和插件来标准化 java 项目构建与管理的工具。

以上就是maven工具新手教学:一篇文章搞懂java项目构建与依赖管理的详细内容,更多关于java maven项目构建与依赖管理的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com