概述
SpringBoot 是基于 Spring 框架的快速开发脚手架,它通过约定优于配置的理念,大大简化了 Spring 应用的初始搭建和开发过程。了解 SpringBoot 项目的文件结构对于快速上手开发至关重要。
💡 提示: SpringBoot 采用标准的 Maven 项目结构,遵循约定优于配置的原则,使开发者能够快速构建生产级应用。
项目结构总览
一个标准的 SpringBoot 项目包含以下核心文件和目录:
my-springboot-project/
├── .mvn/ # Maven Wrapper 配置
│ └── wrapper/
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── src/ # 源代码目录
│ ├── main/ # 主代码
│ │ ├── java/ # Java 源码
│ │ └── resources/ # 资源文件
│ └── test/ # 测试代码
├── target/ # 构建输出目录
├── .gitignore # Git 忽略文件
├── HELP.md # 项目帮助文档
├── mvnw # Maven Wrapper (Linux/Mac)
├── mvnw.cmd # Maven Wrapper (Windows)
├── pom.xml # Maven 配置文件
└── ${project-name}.iml # IntelliJ IDEA 模块文件

核心目录详解
1. .mvn 目录
.mvn 目录是 Maven Wrapper 的配置目录,用于确保项目在不同环境中使用相同版本的 Maven。
.mvn/
└── wrapper/
├── maven-wrapper.jar # Maven Wrapper 执行器
└── maven-wrapper.properties # Maven 版本配置
主要作用:
- 统一团队开发环境中的 Maven 版本
- 避免因 Maven 版本不同导致的构建问题
- 支持在未安装 Maven 的环境中执行构建

2. src 目录
src 目录是项目的源代码根目录,采用标准的 Maven 目录结构:
src/
├── main/ # 主程序源码
│ ├── java/ # Java 源代码
│ │ └── com/ # 包结构
│ │ └── company/
│ │ └── project/
│ │ ├── Application.java # 主启动类
│ │ ├── controller/ # 控制层
│ │ ├── service/ # 服务层
│ │ ├── repository/ # 数据访问层
│ │ ├── entity/ # 实体类
│ │ ├── dto/ # 数据传输对象
│ │ └── config/ # 配置类
│ └── resources/ # 资源文件
│ ├── static/ # 静态资源 (CSS, JS, 图片等)
│ ├── templates/ # 模板文件 (Thymeleaf, FreeMarker等)
│ ├── application.yml # 主配置文件
│ ├── application-dev.yml # 开发环境配置
│ ├── application-prod.yml # 生产环境配置
│ └── logback-spring.xml # 日志配置
└── test/ # 测试代码
├── java/ # 测试 Java 代码
└── resources/ # 测试资源文件

主要子目录说明:
| 目录 | 说明 | 示例文件 |
|---|---|---|
main/java | Java 源代码 | Controller, Service, Entity |
main/resources/static | 静态资源 | CSS, JS, 图片, HTML |
main/resources/templates | 动态模板 | Thymeleaf, Velocity 模板 |
main/resources | 配置文件 | application.yml, logback.xml |
test/java | 单元测试 | JUnit 测试类 |
3. target 目录
target 目录是 Maven 构建过程中的输出目录,包含编译后的文件:
target/
├── classes/ # 编译后的 class 文件
├── test-classes/ # 测试 class 文件
├── generated-sources/ # 生成的源码
├── maven-status/ # Maven 状态信息
├── ${artifactId}-${version}.jar # 可执行 JAR 包
└── ${artifactId}-${version}-sources.jar # 源码 JAR 包

重要文件:
- classes/: 编译后的字节码文件
- {project-name}.jar: 可执行的 Fat JAR 文件
- maven-archiver/: Maven 打包信息
配置文件说明
1. .gitignore
用于指定 Git 版本控制忽略的文件和目录:
# 编译输出
target/
*.class
# 日志文件
*.log
# IDE 文件
.idea/
*.iml
.vscode/
# OS 文件
.DS_Store
Thumbs.db
# Maven
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
⚠️ 注意: 文档中提到的
.getignore应该是.gitignore的笔误。
2. HELP.md
项目帮助文档,通常包含:
- 项目简介和架构说明
- 快速启动指南
- API 文档链接
- 开发规范和约定
3. mvnw 和 mvnw.cmd
Maven Wrapper 脚本文件:
| 文件 | 平台 | 作用 |
|---|---|---|
mvnw | Linux/Mac | Unix 系统的 Maven 包装器 |
mvnw.cmd | Windows | Windows 系统的 Maven 包装器 |
使用示例:
# Linux/Mac
./mvnw clean install
./mvnw spring-boot:run
# Windows
mvnw.cmd clean install
mvnw.cmd spring-boot:run
4. pom.xml
Maven 项目配置文件,定义了项目的依赖、插件和构建配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<!-- 项目基本信息 -->
<groupId>com.example</groupId>
<artifactId>my-springboot-app</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<!-- SpringBoot 父项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</parent>
<!-- 项目属性 -->
<properties>
<java.version>17</java.version>
</properties>
<!-- 依赖管理 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 更多依赖... -->
</dependencies>
<!-- 构建配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
5. ${project-name}.iml
IntelliJ IDEA 模块信息文件,存储:
- 模块配置信息
- Maven 组件信息
- 模块路径信息
- 依赖关系
💡 提示: .iml 文件由 IDE 自动生成,通常应该加入 .gitignore 中。
最佳实践
1. 包结构组织
推荐的包结构:
com.company.project/
├── Application.java # 主启动类
├── controller/ # 控制器层
│ ├── UserController.java
│ └── ProductController.java
├── service/ # 服务层
│ ├── UserService.java
│ └── ProductService.java
├── repository/ # 数据访问层
│ ├── UserRepository.java
│ └── ProductRepository.java
├── entity/ # 实体类
│ ├── User.java
│ └── Product.java
├── dto/ # 数据传输对象
│ ├── request/
│ └── response/
├── config/ # 配置类
│ ├── DatabaseConfig.java
│ └── SecurityConfig.java
├── exception/ # 异常处理
│ └── GlobalExceptionHandler.java
└── util/ # 工具类
└── DateUtils.java
2. 配置文件管理
# application.yml (主配置)
spring:
profiles:
active: @spring.profiles.active@
application:
name: my-springboot-app
---
# application-dev.yml (开发环境)
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:mysql://localhost:3306/dev_db
---
# application-prod.yml (生产环境)
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mysql://prod-server:3306/prod_db
3. 资源文件组织
resources/
├── static/ # 静态资源
│ ├── css/
│ ├── js/
│ ├── images/
│ └── favicon.ico
├── templates/ # 模板文件
│ ├── index.html
│ └── user/
│ └── profile.html
├── i18n/ # 国际化资源
│ ├── messages.properties
│ ├── messages_en.properties
│ └── messages_zh.properties
└── db/ # 数据库相关
├── migration/ # Flyway 迁移脚本
└── data.sql # 初始化数据
开发流程
1. 项目初始化
# 使用 Spring Initializr 创建项目
curl https://start.spring.io/starter.zip \
-d dependencies=web,data-jpa,mysql \
-d name=my-project \
-d packageName=com.example.myproject \
-o my-project.zip
# 解压并导入 IDE
unzip my-project.zip
cd my-project
2. 本地开发
# 运行应用
./mvnw spring-boot:run
# 或者
./mvnw clean compile
./mvnw exec:java -Dexec.mainClass="com.example.Application"
3. 测试和构建
# 运行测试
./mvnw test
# 打包应用
./mvnw clean package
# 运行打包后的应用
java -jar target/my-project-1.0.0.jar
常见问题
问题1:编码问题
现象: 中文字符乱码 解决方案:
<!-- 在 pom.xml 中设置编码 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
问题2:端口冲突
现象: 应用启动失败,端口被占用 解决方案:
# application.yml
server:
port: 8081 # 修改默认端口
问题3:热部署不生效
现象: 代码修改后需要手动重启 解决方案:
<!-- 添加 devtools 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
相关文章
SpringBoot 系列
Java 基础
- [Java EE 企业级开发](../JAVA EE/)
- Maven 生命周期详解
数据库集成
运维部署
问题排查
上一章 / 下一章
- 上一章:无
- 下一章:2.整合JUnit、Mybatis.md