[TOC]
使用maven管理Spring
1. 概述
本教程向您展示如何通過(guò) Maven 管理 Spring 的依賴關(guān)系.最新的Spring版本可以在 [Maven Central倉(cāng)庫(kù)] 中找到. 也可以訪問(wèn) mvnrepository.
2. 使用Maven管理基本的Spring依賴關(guān)系
Spring被設(shè)計(jì)為可高度模塊化的 —— 使用Spring中的一部分,不應(yīng)該也不需要引用另一個(gè)不相關(guān)的部分. 例如, 使用基本的Spring Context可以不使用 Persistence或MVC相關(guān)的Spring庫(kù).
讓我們從一個(gè)非常簡(jiǎn)單的Maven設(shè)置開(kāi)始,這里只使用 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. 通過(guò)啟用支持一些 Spring的核心技術(shù)增強(qiáng)了Spring容器: Spring表達(dá)式語(yǔ)言 (SpEL), 面向切面編程 支持以及 JavaBeans機(jī)制.
注意,我們將spring-context依賴的范圍指定為 runtime scope —— 這將確保在編譯時(shí)沒(méi)有任何依賴Spring特定api的部分. 對(duì)于一些底層開(kāi)發(fā)的情況,可以將 runtime scope 從選定的Spring依賴項(xiàng)中移除(Maven 默認(rèn)是compile),但對(duì)于簡(jiǎn)單的項(xiàng)目來(lái)說(shuō),并不需要在編碼時(shí)對(duì)Spring 的整個(gè)框架進(jìn)行調(diào)用.
還要注意,從Spring 3.2開(kāi)始, 不需要定義CGLIB 依賴關(guān)系(現(xiàn)在升級(jí)到了CGLIB3.0)—— 它已經(jīng)被重新打包(現(xiàn)在所有 net.sf.cglib 包變成了 org.springframework.cglib包)并直接集成在 spring-core 這個(gè) JAR包中(詳情請(qǐng)參考 JIRA計(jì)劃文檔).
3. Spring Persistence與Maven
現(xiàn)在讓我們看看 Spring持久化依賴項(xiàng) —— 主要是 spring-orm :
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework.version}</version>
</dependency>
提供了Hibernate和JPA支持,如 HibernateTemplate 和 JpaTemplate —— 以及持久性相關(guān)的一些依賴關(guān)系: spring-jdbc 和 spring-tx.
JDBC Data Access庫(kù)定義了 [Spring JDBC支持] 以及 JdbcTemplate, 而 spring-tx 代表了非常靈活的 [事務(wù)管理的抽象] (Transaction Management Abstraction).
4. Spring MVC與Maven
要使用Spring Web和Servlet支持,需要在pom中添加兩個(gè)依賴項(xiàng), 當(dāng)然,也需要上面所說(shuō)的核心依賴:
<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環(huán)境中常用的web特定工具,而 spring-webmvc 對(duì)Servlet環(huán)境提供了MVC支持.
因?yàn)?spring-webmvc 將 spring-web 作為一個(gè)依賴,所以在使用 spring-webmvc時(shí)不需要顯式地定義 spring-web.
5. Spring Security與Maven
關(guān)于 Security Maven依賴的深入討論請(qǐng)參考 [Spring Security 3.2.x與Spring 4.0.x的Maven依賴管理].
6. Spring Test與Maven[xx]
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
從Spring 3.2開(kāi)始,Spring MVC Test項(xiàng)目 作為一個(gè)獨(dú)立的項(xiàng)目在github上提供下載 ,并且已被列入 core Test框架,只需要依賴 spring-test 就夠了.
注意,那些仍然依賴Spring 3.1及以下版本的較老的項(xiàng)目,獨(dú)立的舊的Maven依賴仍然存在并可繼續(xù)使用,幾乎是一樣的結(jié)果. 但不是在Maven Central倉(cāng)庫(kù)中,所以使用他們需要添加一個(gè)自定義倉(cāng)庫(kù)到項(xiàng)目的pom中.
7. 使用里程碑版本(Milestones)
Spring的release版本托管在Maven中央倉(cāng)庫(kù)中. 但是,如果一個(gè)項(xiàng)目需要使用里程碑版本,那么需要在pom中添加Spring自己的Maven庫(kù):
<repositories>
<repository>
<id>repository.springframework.maven.milestone</id>
<name>Spring Framework Maven Milestone Repository</name>
<url>http://repo.spring.io/milestone/</url>
</repository>
</repositories>
添加這個(gè)倉(cāng)庫(kù)以后,項(xiàng)目就可以定義如下的依賴關(guān)系:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.0.RC2</version>
</dependency>
8. 使用Snapshots(快照)
和milestons版本一樣, Spring的快照版也托管在自己的倉(cāng)庫(kù)中:
<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 倉(cāng)庫(kù),就可以引用以下的依賴關(guān)系:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.3.0.BUILD-SNAPSHOT</version>
</dependency>
當(dāng)然, 4.x 也是一樣的:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.3.BUILD-SNAPSHOT</version>
</dependency>
9. 總結(jié)
本文討論了使用Maven管理 Spring的實(shí)際情況. 主要介紹的是Maven依賴,還有其他一些知識(shí)點(diǎn). 應(yīng)該是在項(xiàng)目中使用Spring的一篇很好的入門文章.
原文鏈接:[Spring with Maven]
原文日期:2013年04月17日
翻譯日期:2014年06月29日
翻譯人員:[鐵錨]
[Maven Central倉(cāng)庫(kù)]:http://search.maven.org/#search|ga|1|g%3A%22org.springframework%22
[Spring JDBC支持]:http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/jdbc.html
[事務(wù)管理的抽象]:http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/transaction.html
[Spring Security 3.2.x與Spring 4.0.x的Maven依賴管理]:http://blog.csdn.net/renfufei/article/details/35787159
[Spring with Maven]:http://www.baeldung.com/spring-with-maven
[鐵錨]:http://blog.csdn.net/renfufei