ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 1\. 概述 本教程向您展示如何通过 Maven 管理 Spring 的依赖关系.最新的Spring版本可以在 [Maven Central仓库](http://search.maven.org/#search|ga|1|g%3A%22org.springframework.security%22) 中找到. 也可以访问  [mvnrepository:org.springframework](http://www.mvnrepository.com/artifact/org.springframework). ### 2\. 使用Maven管理基本的Spring依赖关系  Spring被设计为可高度模块化的 —— 使用Spring中的一部分,不应该也不需要引用另一个不相关的部分. 例如, 使用基本的Spring Context可以不使用 Persistence或MVC相关的Spring库. 让我们从一个非常简单的Maven设置开始,这里只使用 spring-context 依赖 : ~~~ <properties> <org.springframework.version>3.2.8.RELEASE</org.springframework.version> <!-- <org.springframework.version>4.0.2.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注入(Injection)容器,并依赖很少的Spring包: spring-core, spring-expression, spring-aop 和 spring-beans. 通过启用支持一些 Spring的核心技术增强了Spring容器: [Spring表达式语言 (SpEL)](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/expressions.html), [面向切面编程](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/aop.html#aop-introduction) 支持以及 [JavaBeans机制](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-definition). 注意,我们将spring-context依赖的范围指定为 runtime scope —— 这将确保在编译时没有任何依赖Spring特定api的部分. 对于一些底层开发的情况,可以将 runtime scope 从选定的Spring依赖项中移除(Maven 默认是compile),但对于简单的项目来说,并不需要在编码时对Spring 的整个框架进行调用. 还要注意,从Spring 3.2开始, 不需要定义CGLIB 依赖关系(现在升级到了CGLIB3.0)—— 它已经被重新打包(现在所有 net.sf.cglib 包变成了 org.springframework.cglib包)并直接集成在 spring-core 这个 JAR包中(详情请参考 [JIRA计划文档](https://jira.springsource.org/browse/SPR-9669)). ### 3\. Spring Persistence与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 Data Access库定义了 [Spring JDBC支持](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/jdbc.html) 以及 JdbcTemplate, 而 spring-tx 代表了非常灵活的 [事务管理的抽象](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/transaction.html)(Transaction Management Abstraction). ###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-webmvc时不需要显式地定义 spring-web. ### 5\. Spring Security与Maven 关于 Security Maven依赖的深入讨论请参考 [Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理](http://blog.csdn.net/renfufei/article/details/35787159). ### 6\. Spring Test与Maven Spring Test框架可以通过以下依赖引入到项目中: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> ~~~ 从Spring 3.2开始,Spring MVC Test项目 作为一个独立的项目[在github上提供下载](https://github.com/SpringSource/spring-test-mvc) ,并且已被列入 core Test框架,只需要依赖 spring-test 就够了. 注意,那些仍然依赖Spring 3.1及以下版本的较老的项目,独立的旧的Maven依赖[仍然存在并可继续使用](https://github.com/SpringSource/spring-test-mvc#readme),几乎是一样的结果. 但不是在Maven Central仓库中,所以使用他们需要添加一个自定义仓库到项目的pom中. ### 7\. 使用里程碑版本(Milestones) Spring的release版本托管在Maven中央仓库中. 但是,如果一个项目需要使用里程碑版本,那么需要在pom中添加Spring自己的Maven库: ~~~ <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>3.2.0.RC2</version> </dependency> ~~~ ### 8\. 使用Snapshots(快照) 和milestons版本一样, Spring的快照版也托管在自己的仓库中: ~~~ <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中启用了 SNAPSHOT 仓库,就可以引用以下的依赖关系: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.3.0.BUILD-SNAPSHOT</version> </dependency> ~~~ 当然, 4.x 也是一样的: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.3.BUILD-SNAPSHOT</version> </dependency> ~~~ ### 9\. 总结 本文讨论了使用Maven管理 Spring的实际情况. 主要介绍的是Maven依赖,还有其他一些知识点. 这应该是在项目中使用Spring的一篇很好的入门文章.