最近在做了一个将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.5免安装、jdk1.6免安装、jdk1.8(32和64)
jdk免安装版包含jdk1.6 jdk1.7 jdk1.8,解压配置下环境变量就可以用。真测可用
JDK大全 JDK1.6 JDK1.7 JDK1.8 JDK1.9 JDK10 JDK11 JDK12
经常使用的jdk1.6版本与1.8版本,可以根据需要使用查阅
jdk1.8英文版本和jdk1.6中文版本,这是关于开发时候查询相应类和方法使用的
jdk1.6、1.7、1.8的local_policy.jar和US_export_policy.jar,用于替换jdk里的两个jar,解决无法使用AES192、256位加密解密的问题
JDK1.6和1.8。1.6为中文版,1.8为英文版,JDK可以帮助学JAVA的朋友们解决一下API上面的问题。
jdk1.6和jdk1.7的32位和1.7的64位和jdk1.8,只打包了这三个目前比较常用的。
jdk1.6到jdk1.8官网下载安装版,i586微32位jdk,x64为64位,按各自所需下载安装
jdk1.6 和jdk1.8中文api jdk1.6 和jdk1.8中文api jdk1.6 和jdk1.8中文api jdk1.6 和jdk1.8中文api
jdk1.6,jdk1.7,jdk1.8以及jre1.6,jre1.7,jre1.8
JDK1.6、1.7、1.8 、1.9中文版API(全),里面每个版本分开放置,并包含了一点使用的小建议,需要的拿走(1积分互帮互助)
dm8-jdbc 达梦8连接jdbc、Hibernate的 对应jdk1.6、1.7、1.8jar包
JDK1.8和JDK1.6API帮助文档
因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。 替换的文件:%JDK_HOME%\jre\lib\security\local_policy.jar 详细...
JCE无限制权限策略文件,下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。将两个jar文件放到%JDK_HOME%\jre\lib\security下覆盖原来文件,记得先备份
net.mindview.util包,jdk1.6和jdk1.8版本的tools.jar
mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...
jce_policy6-8.jar 用于jdk1.6-1.8 解决https接口调用报错
JCE Unlimited Strength Jurisdiction Policy Files; Illegal key size or default parameters密钥...根据您jdk对应的版本替换${java_home}/jre/lib/security/ 下面的local_policy.jar和US_export_policy.jar即可;