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

2 篇文章 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服务器上试运行了。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值