前言
很多 Java 初学者在入门时都会遇到一个困惑:Maven 项目和 Spring Boot 项目到底是什么关系?是二选一,还是可以共存?为什么有的教程直接建一个 Maven 项目就能写代码,而有的教程一定要用 Spring Boot 才能跑起一个 Web 服务?
这些问题的根源在于——没有分清"构建工具"和"开发框架"这两个不同层次的东西。
本文将从 IDEA 创建 Maven 项目的实操步骤出发,逐步讲清楚 Maven 的本质定位、适用场景,以及它与 Spring Boot 之间真正的关系。读完之后,你应该能明确地回答:什么场景下该用 Maven,什么场景下该用 Spring Boot,以及为什么它们不是互相替代的关系。
一、使用 IDEA 构建 Maven 项目
创建步骤
1. File → New → Project2. 左侧选择"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 Stringhello(){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 管"建成什么样"。
这类"把底层概念讲透"的文章,后续还会持续输出。