项目新版本中准备引入Cache,而Spring从3.1开始加入了对cache的支持,所以准备将Spring从3.0升级到3.1。但升级过程中遇到了不少问题.
项目中用到了以下Spring框架:
Spring 3.0.0.RELEASE
SpringMVC 3.0.0.RELEASE
SpringOSGI 2.0.0.M1
SpringSecurity 3.0.0.RELEASE
升级版本搭配一:
Spring用的是http://ebr.springsource.com/repository/app/中的版本,Maven描述结构如下,以core为例:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.core</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
Spring 3.1.0.RELEASE
SpringMVC 3.1.0.RELEASE
SpringOSGI 2.0.0.M1
SpringSecurity 3.0.0.RELEASE
由于Spring EBR repository中还没有SpringSecurity 3.1.0的版本所以只能用3.0.0版。
问题:
Spring Security 与Spring 3.1.0.RELEASE不兼容,Spring Security依赖的Spring版本是[3.0.0.RELEASE,3.1.0),也就是不包括3.1.0版本。
升级版本搭配二:
看来Spring EBR repository也很垃圾,没办法,换吧。这个换的成本还不小,spring bundle的Maven dependency都要换,换成了这样:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
Spring 3.1.0.RELEASE
SpringMVC 3.1.0.RELEASE
SpringOSGI 2.0.0.M1
SpringSecurity 3.1.0.RELEASE
问题:
SpringOSGI 2.0.0.M1和Spring 3.1.0.RELEASE不兼容,提示在SpringOSGI中依赖的一些类方法,在Spring 3.1.0.RELEASE中找不到(这些方法在Spring 3.0.0.RELEASE是有的)。
升级版本搭配三:
没办法,只能升级SpringOSGi了。但升级SpringOSGi就悲剧了,由于Spring自己不想管SpringOSGi这个烂东西了,把它丢给了Eclipse,改了个名字叫Gemini Blueprint。Eclipse拿了也不想管,搞了几年才出了个1.0版本,之后就没什么动静了,更要命的是还将SpringOSGi中的一些东西砍掉了。原来spring-osgi-web在Gemini Blueprint中找不到了。这可要命令,之前Spring OSGi + Spring MVC的整合这个是不能少的,现在又要找Gemini Blueprint和Spring MVC的整合方法,真是要命啊。
Spring 3.1.0.RELEASE
SpringMVC 3.1.0.RELEASE
Gemini Blueprint 1.0.0.RELEASE
SpringSecurity 3.1.0.RELEASE
问题:
结果可想而知。目前还没找到Gemini Blueprint和Spring MVC的整合方法。
升级版本搭配四:
不进就退吧,退一步试试,将SpringOSGi降为1.2.1。
Spring 3.1.0.RELEASE
SpringMVC 3.1.0.RELEASE
SpringOSGi 1.2.1
SpringSecurity 3.1.0.RELEASE
初步测试SpringOSGi1.2.1与Spring3.1看来没有问题,虽然还有一些其它问题,接下来慢慢解决。