Grails 2.5.0/2.4.5 升级历险记 & JAVA7/8的一个小bug
因为手头一个grails项目的性能有点问题,打算大幅度调整一下,结果一看grails 2.x系列的最后一个版本2.5发布了,就打算升级到这个系列上来,结果引发了一连串的莫名其妙的问题,总结一下:
1.cacheManager错误,原因是hibernate升级到4.3.8.1之后对应的ehcache 2.9对缓存管理比较严格,结果spring security就杯具了。临时解决方法:
https://jira.grails.org/browse/GRAILS-12120
2.如果使用2.4.5版本的grails,grails integrate-with --intellij导致有一些jar文件没有引用到,比如hibernate-core, 结果是如果引用了sessionFactory什么的,需要import package的地方,ide里面通通看不到(运行没问题),但是2.4.4和2.5.0都没有问题。
3.版本老项目终于升级到2.5.0,结果发现在idea里面点run还是报错,Validator什么的bean找不到,很怪异的错误。单独grails run-app没问题,折腾了一下把项目代码完整的拷贝到新的另外一个空项目里面,完全没有错误。各种grails clean试过之后完全不好用,最后灵机一动想起来USER_HOME下还有个.grails文件夹,删掉之后终于清静了,恢复正常。
4.新问题:http://stackoverflow.com/questions/27613539/grails2-4x-and-spring-security-core2-0-rc4-cannt-use-requestmap
Grails 的hibernate 4插件从某个版本开始导致spring security无法加载数据库存储的requestmap(直接写Config.grooy的不受影响),bug产生的原因是project的fork,hibernate3插件不受影响。
5.JAVA7和8的问题
JAVA 7和JAVA 8对user.home的认知不一样,如果改了路径的话,导致对.m2路径识别错误。
具体就是JAVA8始终认为c:\users\username是user.home,而JAVA7则寻找是否改过路径,应该是注册表的问题。下面是修正方法,对于java7统一读c:\users:
set _JAVA_OPTIONS=-Duser.home=%HOMEDRIVE%%HOMEPATH%
每次grails大版本升级都是个痛苦的事情,各种莫名其妙的小错误。
6.Grails 3基于SpringBoot,所以连带着插件加载也一起跟springboot模式走了,对目前这种乱套模式应该会有极大改善。