1. 概述
本教程将演示如何通过 Maven 配置 Spring 依赖。最新的 Spring 版本可在 Maven 中央仓库 找到。
2. Maven 基础 Spring 依赖
Spring 设计为高度模块化——使用其中一个部分不应也不需要依赖其他部分。例如,基础的 Spring Context 可以独立于持久化或 MVC 库使用。
先从 基础 Maven 配置 开始,仅使用 spring-context 依赖:
<properties>
<org.springframework.version>5.2.8.RELEASE</org.springframework.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version>
<scope>runtime</scope>
</dependency>
此依赖——spring-context——定义了实际的 Spring 依赖注入容器,并包含少量依赖:spring-core、spring-expression、spring-aop 和 spring-beans。这些依赖通过支持以下 核心 Spring 技术 增强容器功能:
- Spring 核心工具
- Spring 表达式语言 (SpEL)
- 面向切面编程 支持
- JavaBeans 机制
⚠️ 注意我们将依赖定义为 runtime 范围——这确保编译时不会依赖任何 Spring 特定 API。对于更复杂的场景,可以移除部分 Spring 依赖的 runtime 范围,但简单项目无需编译时依赖 Spring 即可完全使用框架。
Spring 5.2 最低要求 JDK 8,同时支持 JDK 11(当前 LTS 版本)和 JDK 13(最新 OpenJDK 版本)。
3. Spring 持久化与 Maven
现在看 Spring 持久化依赖——主要是 spring-orm:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework.version}</version>
</dependency>
它提供 Hibernate 和 JPA 支持(如 HibernateTemplate 和 JpaTemplate),以及额外的持久化相关依赖:spring-jdbc 和 spring-tx。
- JDBC 数据访问库定义了 Spring JDBC 支持 和 JdbcTemplate
- spring-tx 代表高度灵活的事务管理抽象
4. Spring MVC 与 Maven
要使用 Spring Web 和 Servlet 支持,需在 pom 中添加两个依赖(除上述核心依赖外):
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
- spring-web 包含 Servlet 和 Portlet 环境的通用 Web 工具
- spring-webmvc 启用 Servlet 环境的 MVC 支持
✅ 由于 spring-webmvc 已依赖 spring-web,使用时无需显式定义后者。
从 Spring 5.0 开始,要支持响应式 Web 框架,可添加 Spring WebFlux 依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
<version>${org.springframework.version}</version>
</dependency>
5. Spring Security 与 Maven
Security Maven 依赖 在 Spring Security with Maven 文章中有详细讨论,此处不再赘述。
6. Spring 测试与 Maven
通过以下依赖引入 Spring 测试框架:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
Spring 5 支持并发测试执行(参考)。
7. 使用里程碑版本
Spring 正式版托管在 Maven 中央仓库。若项目需使用里程碑版本,需在 pom 中添加自定义 Spring 仓库:
<repositories>
<repository>
<id>repository.springframework.maven.milestone</id>
<name>Spring Framework Maven Milestone Repository</name>
<url>http://repo.spring.io/milestone/</url>
</repository>
</repositories>
添加仓库后,可定义如下依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.0-M1</version>
</dependency>
8. 使用快照版本
与里程碑类似,快照版本托管在自定义仓库:
<repositories>
<repository>
<id>repository.springframework.maven.snapshot</id>
<name>Spring Framework Maven Snapshot Repository</name>
<url>http://repo.spring.io/snapshot/</url>
</repository>
</repositories>
在 pom.xml 中启用快照仓库后,可引用以下依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.3.BUILD-SNAPSHOT</version>
</dependency>
或 5.x 版本:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.0-SNAPSHOT</version>
</dependency>
9. 总结
本文详细说明了 Spring 与 Maven 集成的实践要点。列出的 Maven 依赖虽非全部,但已覆盖主要场景。对于新项目,这应是一个扎实的起点。踩坑提示:版本冲突是常见问题,建议统一管理版本号(如使用 properties 标签)。