一个老的ssh的项目,进行二次开发(增加一些新功能)后,首先用Eclipse中集成的Tomcat启动没有任何问题,但是把启动后的webapps下得目录放到 windows的普通tomcat下启动,居然启动不起来
报错如下:
各种折腾,首先发现,在win下的Tomcat目录conf下得配置文件 server.xml 中的最后部分,host标签中多了一个这个标签
<Context path="" docBase="。。。。。。。。。。 />
里面有个 eclipse的引用,直接把这行标签删掉,再次启动,异常改变了。说明解决了一些问题。
然后异常是有两处报:
Unsupported major.minor version 52.0解决办法
根据上面链接,找到解决办法为修改 eclipse中当前项目的三处jdk版本,但是修改过程中又报错:
Project facet jst.web.jstl has not been defined.
解决方法,参见上文。
然后,终于,项目可以在 windows 的 对立 Tomcat中启动了。
但是将其拷贝到Linux中运行,继续报错
查看日志,报错如下:
java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironment
各种百度,均不能解决问题。
后来同事找到解决方法:
删除项目中的一个 spring jar包:
问题解决。
原因:
项目是个老项目,没有用maven关联jar包,除了常规依赖外,其他jar包都是放在 WEB-INF的lib目录下:
我们看到,实际上,项目中有两个 spring-context jar包,可能导致了冲突。
下面这个jar是5.0版本的,而其它spring相关jar都是3.0版本的。
其实是因为同事增加了一个定时任务的功能,在定时任务功能的代码中用到了一个注解:
就是这个注解,据说它是 spring-context 4.0以上jar包中才有的,因为报错,所以同事引入了 spring-contxt 5.0 的jar包,但是5.0的jar包中可能需要依赖spring core等其他spring高版本的jar包,而我们项目中其他所有的spring jar包都是 3.0版本的,而且有两个contxt jar,这些都有可能导致了
ConfigurableEnvironment 异常的发生。
所以,解决版本就是,删掉 spring-contxt 5.0 的jar包,同时注释掉报错的代码及其关联代码: