今天是在公司的最后第二天,明天应该离开了。
早上到办公室,主管说昨晚在WAS上部署程序程序出现问题。我问什么问题,说是jar冲突,程序起不来。
我以为一切很好解决,因为昨天下午看到同事打包的时候,没有加入CXF的依赖包,还提醒他加入就可以了。谁料到从早上9点半一直到下午4点15我一直都再解决这个问题,哦,当然了,主要Google了。
这个期间查找资料及博文主要是设定类加载器的顺序,这个真的不是很懂,虽然看过JVM相关的内容,但是实际应用起来,还真的一头雾水。期间当然有去过IBM的员工写的文章,下了他们的程序测试,的确是可以的。可能是基础不够,和我的CXF方式不一致,我是使用CXF 的simple front方式,用这种方式主要是不想将注解侵入到服务类。
当我设定过启动顺序后,我的程序启动就报错了,很奇怪难道不能设定本地加载器优先吗?
记得以前其他项目组也有设定过啊?CXF这么特别吗?接着我试了一个很单独cxf的ws的项目,设定启动顺序,OK。
排除掉CXF的问题,接着注释掉我项目中CXF的bean,不启用CXF再次启动,还是启动不起来。问题已经出来了,是我们项目本身的问题。真的快疯了,我们的项目里有什么特殊的地方吗?
错误大致如下 loader "com/ibm/ws/classloader/CompoundClassLoader@31c031c" ... for a different type with name "javax/servlet/ServletContex
GOOGLE 下,老外说是项目中又javax的包。
最后我在我们的项目lib下发现了servet-api.jar,删掉,Ok
最后写下我们的版本是cxf2.4.3,was是8.5.