一. 起因
因为在项目中遇到spring版本升级,spiring 3.1.0.CI-995 升级到 3.1.0.RELEASE,同样是3.1.0,但是包间的关系相差甚多,导致maven直接修改版本号后,spring相关包不存在。程序不能正常编译。
尝试通过maven中不能通过的项修改回原来的版本号,代码编译成功,但是运行是报错。原因很简单,3.1正式版要比之前的过渡版本修改的内容多很多,有很多修改,原有的配置文件中的配置项不在被使用。
配置文件按exception的信息修正后,代码正常启动。那么在保障程序正常启动后,就需要考虑一个问题了,为什么那些spring相关的包没有正式版呢?
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<!-- <version>3.0.7.RELEASE</version> -->
<version>3.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.0.RELEASE</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.0.RELEASE</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
......
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-transaction</artifactId>
<version>3.1.0.CI-995</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web-portlet</artifactId>
<version>3.1.0.CI-995</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web-servlet</artifactId>
<version>3.1.0.CI-995</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web-struts</artifactId>
<version>3.1.0.CI-995</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
二. 大版本升级后的包合并
Spring 2.0 --> 2.5
'spring-support.jar' --> 'spring-context-support.jar'
'spring-portlet.jar' --> 'spring-webmvc-portlet.jar'
'spring-struts.jar' --> 'spring-webmvc-struts'
'spring-jmx.jar' --> 'spring-context.jar'
'spring-remoting.jar'--> 'spring-context.jar'
Spring 3.1.0
'spring-transaction' --> 'spring-tx'
'spring-web-servlet' --> 'spring-webmvc'
'spring-web-struts' --> 'spring-webmvc'
Spring 3.2.0
'spring-arm' --> 'spring-core'
三. spring各jar说明
spring3.1新特性:
Spring 3.1与之前2.X的不一样,新版本把原来的spring.jar分解了,想要使用哪个功能就导入相应的jar,现给出一些包的说明
// Spring的面向切面编程,提供AOP(面向切面编程)实现
org.springframework.aop-3.1.0.RELEASE
// Spring独立的asm程序,相遇Spring2.5.6的时候需要asmJar包.3.0开始提供他自己独立的asmJar
org.springframework.asm-3.1.0.RELEASE
// Spring提供对AspectJ框架的整合
org.springframework.aspects-3.1.0.RELEASE
// SpringIoC(依赖注入)的基础实现
org.springframework.beans-3.1.0.RELEASE
// Spring-context的扩展支持,用于MVC方面
org.springframework.context.support-3.1.0.RELEASE
// Spring提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等
org.springframework.context-3.1.0.RELEASE
// Spring3.1的核心工具包
org.springframework.core-3.1.0.RELEASE
// Spring表达式语言
org.springframework.expression-3.1.0.RELEASE
// Spring3.1对Tomcat的连接池的集成
org.springframework.instrument.tomcat-3.1.0.RELEASE
// Spring3.1对服务器的代理接口
org.springframework.instrument-3.1.0.RELEASE
// 对JDBC的简单封装
org.springframework.jdbc-3.1.0.RELEASE
// 为简化JMS API的使用而作的简单封装
org.springframework.jms-3.0.0.RELEASE
// 整合第三方的ORM框架,如hibernate,ibatis,jdo,以及spring的JPA实现
org.springframework.orm-3.1.0.RELEASE
// Spring对Object/XMl的映射支持,可以让Java与XML之间来回切换
org.springframework.oxm-3.1.0.RELEASE
// 对Junit等测试框架的简单封装
org.springframework.test-3.1.0.RELEASE
// 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理
org.springframework.transaction-3.1.0.RELEASE
// SpringMVC的增强
org.springframework.web.portlet-3.1.0.RELEASE
// 对JEE6.0Servlet3.0的支持
org.springframework.web.servlet-3.1.0.RELEASE
// 整合Struts的时候的支持
org.springframework.web.struts-3.1.0.RELEASE
// SpringWeb下的工具包
org.springframework.web-3.1.0.RELEASE
四. 包间依赖
Spring包依赖说明:
1) spring-core.jar:
==> commons-collections.jar
==> spring-core.jar
2) spring-beans.jar:
==> spring-core.jar
==> cglib-nodep-2.1_3.jar
3) spring-aop.jar:
==> spring-core.jar
==> spring-beans.jar
==> cglib-nodep-2.1_3.jar
==> aopalliance.jar
4)spring-context.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring- aop.jar
==> commons-collections.jar
==> aopalliance.jar
5) spring-dao.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring-aop.jar
==> spring-context.jar
6) spring-jdbc.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring-dao.jar
7) spring-web.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring-context.jar
8) spring-webmvc.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring-context.jar
==> spring-web.jar
9) spring-hibernate.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring-aop.jar
==> spring-dao.jar
==> spring-jdbc.jar
==> spring-orm.jar
==> spring-web.jar
==> spring-webmvc.jar
10) spring-orm.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring-aop.jar
==> spring-dao.jar
==> spring-jdbc.jar
==> spring-web.jar
==> spring-webmvc.jar
11) spring-remoting.jar(spring-content):
==> spring-core.jar
==> spring-beans.jar
==> spring-aop.jar
==> spring-dao.jar
==> spring-context.jar
==> spring-web.jar
==> spring-webmvc.jar
12) spring-support.jar:
==> spring-core.jar
==> spring-beans.jar
==> spring-aop.jar
==> spring-dao.jar
==> spring-context.jar
==> spring-jdbc.jar
13) spring-mock.jar(spring-test):
==> spring-core.jar
==> spring-beans.jar
==> spring-dao.jar
==> spring-context.jar
==> spring-jdbc.jar
注意:因为部分内容是网上直接引用过来,我并没有去验证,所以肯定有不准确的地方,仅用于参考使用。