### 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的一篇很好的入門文章.
- 前言
- 配置Maven并新建項目遇到的問題
- 使用Maven管理Spring
- maven項目使用spring報java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListe
- SSM框架——詳細整合教程(Spring+SpringMVC+MyBatis)
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架
- 使用MyBatis_Generator生成Dto、Dao、Mapping
- Maven創建web項目具體過程
- Spring MVC常用注解整理
- DispatcherServlet中一些特殊的Bean總結