jetty实战1-jar hell问题
1.现象
在从jboss迁移到jetty后,有一个应用页面报了如下异常:
而调用的classloader具体的addJars方法如下:
?
可以发现最终调用的是getdents(最终好像是调用readdir),然后这个系统函数list的文件是什么顺序,目前我也没有搞懂,
有说法是按inode号,试试下好像也不是,总是,顺序是操作系统相关的且不能保证的。
?
3.解决方案:
1.复写jetty的webAppClassloader,将list出来的文件排序,甚至可以配置指定几个包的顺序在前。
2.通过maven配置exclude一个依赖,但要保证兼容,如果不兼容,需要沟通两方二方库人员解决
3.山寨办法,打包时对jar包重命名,不是很靠谱。