首页 > 其他 > 详细

产品环境升级JDK1.6 到JDK1.8遇到的各种问题

时间:2015-01-22 02:05:30      阅读:517      评论:0      收藏:0      [点我收藏+]

最近在做了一个将JDK1.6升级到JDK1.8的一个task,这里跟大家分享一下我们在做这个task过程中遇到的各种问题。

? ? ? ? 首先描述一下我们在JDK1.6中所使用的各种组建,产品原来的框架选择的是Spring3.x,同时使用了HttpClient4.x,还有我们构建环境使用的是gradle 1.9。因为我们只是尝试升级,所以要保证build.gradle在JDK 1.6 和1.8下都可以运行。所以决定在运行使加入toggle -Pjava8标记是运行在1.8环境下,没有则表示运行在1.6环境下(hasProperty("java8"))。

?

? ? 在JDK1.8环境下需要升级以下组建,

? ? ? ?(1)升级Spring3.x --> Spring 4.x ?(**之后查阅Spring官网资料发现Spring4.x的发布就是为了支持JDK1.8,不过其同时修正了Spring3.2.3,使其也可以在JDK1.8下运行。)

? ? ? ?(2)升级ASM3.x--> 5.x(**查阅ASM官网发布日志发现ASM自2013年10月发布5.0-BETA版为了支持JDK1.8)

?

升级完这些之后,发现出现了一个编译错误,Spring org.springframework.cache.Cache添加了两个抽象方法(get和putIfAbsent),因为这两个方法在之前的系统中没有使用过,所以决定实现这两个方法,不过抛出UnsupportException。可是为了保证可以在JDK1.6下可以编译通过所以注释了@override标签。

?

? 编译通过后,尝试运行Unit test(gradle test, urlTest, inTest)发现字节码错误,搜索资料发现JDK1.8中有几个小版本存在字节码Verify的Bug,所以在运行Unit test时加入 JVM参数 -noverify,取消字节码验证。

?

?再次运行Unit test,又出现了一个Spring Bean的注入错误。原来,项目中引入了google的一些jar文件,所以在Spring注入的时候选择了XML配置(配置需要依赖google jar文件中的类)和@autowire两种注入方式。

? ?搜索资料后发现,在Spring3.x和4.x中@autowire按照如下方式查找bean,

? ? ? 1)首先按照Type在container中查找,如果只有一个那么就按照type注入

? ? ? ?2)如果有多个实例,就按照name再次过滤,如果按名字可以匹配,那么就按照name注入

? ? ? ?3)如果按照名字或者类型都匹配不到,那么就抛出异常。

按照这样的解释,我们的程序是可以正常执行的,这一点让我们百思不得其解,最后我们按照加入了@Qualifier标签,虽然解决了这个问题,可是我们直到现在还没有想到到底是因为什么。

?

在解决了这些问题之后我们的所有测试就可以正常运行了。

我们暂时可以尝试在Staging服务器上试运行了。

?

产品环境升级JDK1.6 到JDK1.8遇到的各种问题

原文:http://xiaoshao.iteye.com/blog/2178239

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!