前言
很多 Java 初学者在入门时都会遇到一个困惑:Maven 项目和 Spring Boot 项目到底是什么关系? 是二选一,还是可以共存?为什么有的教程直接建一个 Maven 项目就能写代码,而有的教程一定要用 Spring Boot 才能跑起一个 Web 服务?
这些问题的根源在于——没有分清"构建工具"和"开发框架"这两个不同层次的东西。
本文将从 IDEA 创建 Maven 项目的实操步骤出发,逐步讲清楚 Maven 的本质定位、适用场景,以及它与 Spring Boot 之间真正的关系。读完之后,你应该能明确地回答:什么场景下该用 Maven,什么场景下该用 Spring Boot,以及为什么它们不是互相替代的关系。
一、使用 IDEA 构建 Maven 项目
创建步骤
1. File → New → Project
2. 左侧选择 "Maven Archetype"
3. 填写:
- Name: 项目名称
- Location: 项目路径
- GroupId: com.example(组织标识)
- ArtifactId: my-project(项目标识)
- Archetype: maven-archetype-quickstart(Java应用)
4. 点击 Create
生成的项目结构
my-project/
├── pom.xml ← Maven 核心配置文件
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/
│ │ │ └── App.java
│ │
│ └── test/
│ └── java/
│ └── com/example/
│ └── AppTest.java
└── target/ ← 编译输出目录(自动生成)
二、Maven 是什么?
Maven 本质上是一个项目管理和构建工具,它不是一个框架。
Maven 解决的核心问题:
┌─────────────────────────────────────────────────┐
│ 1. 依赖管理 → 统一管理 jar 包版本和传递依赖 │
│ 2. 项目构建 → 编译、测试、打包、部署自动化 │
│ 3. 项目结构 → 约定标准目录结构,"约定优于配置" │
│ 4. 模块管理 → 多模块项目的聚合与继承 │
└─────────────────────────────────────────────────┘
pom.xml 示例
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- 依赖管理 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
三、Maven 项目适用场景
场景 说明
──────────────────────────────────────────────────────
纯 Java 工具库/SDK 不需要 Web 容器,只发布 jar 包
命令行应用程序 有 main 方法,直接运行
多模块基础架构 做项目的父 POM,统一管理依赖版本
算法/数据结构练习 轻量级,不需要任何框架
自定义框架开发 开发给别人用的基础框架
JNI / 原生交互项目 Java 调用 C/C++ 的场景
简单的数据处理脚本 读文件、解析、转换等
四、Maven 项目 vs Spring Boot 项目 —— 核心区别
Maven 项目 Spring Boot 项目
──────────────────────────────────────────────────────────────────
本质定位 构建工具管理的项目 基于 Spring Boot 框架的项目
pom.xml 只有基本坐标 继承 spring-boot-starter-parent
引入 spring-boot-starter 依赖
启动方式 需要自己写 main 方法 提供 @SpringBootApplication 主类
内嵌 Tomcat/Jetty 容器
Web 能力 ❌ 没有(需自己集成) ✅ 开箱即用(内嵌 Web 服务器)
依赖管理 自己逐个添加和管理版本 Starter 机制自动管理传递依赖
配置方式 全靠自己写 application.yml + 自动配置
适用复杂度 简单 → 中等 中等 → 大型企业级应用
开发效率 低(基础设施都要自己搭建) 高(脚手架 + 自动配置)
部署方式 打 jar 包手动运行 java -jar 直接启动,也支持容器化
对比:同样的需求两种写法
Maven 项目 —— 手动写一个 HTTP 服务器
// pom.xml 需要手动引入 netty/jetty/servlet 等依赖
public class App {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8080);
while (true) {
Socket socket = server.accept();
// 手动解析 HTTP 请求...
// 手动构造 HTTP 响应...
}
}
}
Spring Boot 项目 —— 开箱即用
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args); // 内嵌 Tomcat 自动启动
}
}
@RestController
class HelloController {
@GetMapping("/hello")
public String hello() { return "Hello World"; }
}
五、关系总结
Maven 和 Spring Boot 不是互斥关系,而是层级关系:
┌──────────────────────────────────────────┐
│ Spring Boot 项目 │ ← 框架层:提供业务能力
│ ┌────────────────────────────────┐ │
│ │ Maven 构建管理 │ │ ← 构建层:管理依赖和打包
│ │ ┌──────────────────────┐ │ │
│ │ │ Java JDK │ │ │ ← 语言层
│ │ └──────────────────────┘ │ │
│ └────────────────────────────────┘ │
└──────────────────────────────────────────┘
Spring Boot 项目 = Spring Boot 框架 + Maven(或 Gradle)构建工具
六、选择建议
你的需求是什么?
│
├─ 做 Web 应用 / REST API / 微服务
│ └─→ 选 Spring Boot(底层还是用 Maven 管理)
│
├─ 写纯 Java 工具 / SDK / 库
│ └─→ 选 Maven 项目就够了
│
├─ 学习 Java 基础 / 刷算法题
│ └─→ 选 Maven 项目(最轻量)
│
├─ 做多模块大型项目
│ └─→ Maven 做父项目 + 各子模块引入 Spring Boot
│
└─ 不确定
└─→ 直接用 Spring Boot,它本身就是 Maven 项目
一句话总结:Maven 是"怎么建房子的工具",Spring Boot 是"房子的装修方案"。几乎所有 Spring Boot 项目底层都是 Maven 项目,但不是所有 Maven 项目都需要 Spring Boot。
写在最后
搞清楚 Maven 和 Spring Boot 的定位之后,你会发现很多之前模糊的概念突然就通了。它们从来都不是竞争关系,而是一套组合拳——Maven 管"怎么建",Spring Boot 管"建成什么样"。
这类"把底层概念讲透"的文章,后续还会持续输出。如果你觉得这篇文章帮你理清了思路,欢迎关注我的微信公众号「技海拾贝」,点个星标不迷路。 后续会持续更新 Java 全栈技术深度解析、实战踩坑记录、架构设计思考等系列内容,干货不断。