博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eclipse启动项目正常,放到tomcat下单独启动就报错的 一例
阅读量:5299 次
发布时间:2019-06-14

本文共 2381 字,大约阅读时间需要 7 分钟。

一个老的ssh的项目,进行二次开发(增加一些新功能)后,

 

首先用Eclipse中集成的Tomcat启动没有任何问题,但是把启动后的webapps下得目录放到 windows的普通tomcat下单独启动,居然启动不起来

【直接访问启动完的Tomcat的8080端口号是没问题的,但是加上项目路径/dc2就会报错

报错如下:

注意:异常信息中开始部分即1那行代码不要特别关注,貌似所有Tomcat中项目一开始就启动不起来都会抛出这个异常,真正要参照异常找问题原因的是一次异常信息中的最后一个caused by后面的部分,也就是2那行,注意2那行中有个 dc2_3,而这个正是下面原因中 context标签中配置的 dc2_3

 

原因:

各种折腾,发现,在windows下的Tomcat目录conf下得配置文件 server.xml 中的最后部分,host标签中多了一个这个标签

 
里面有个 eclipse的引用,直接把这行标签删掉,再次启动,异常改变了。说明刚才的异常解决了。 =============================== 上面异常的启发: 1、遇到任何异常信息,即使是自己没见过的异常信息,一般都是 根据当前这段异常中最后一个 caused by 后面的内容,来检索问题原因。 2、在有些版本的eclipse中,在eclipse中配置过的本地Tomcat,有可能会在本地Tomcat目录下的server.xml配置文件中的host标签中自动生成 

根据上面链接,找到解决办法为修改 eclipse中当前项目的三处jdk版本为统一的较低版本,但是修改过程中又报错:
 

解决方法,参见上文。
【原来项目最早用的是jdk1.6,现在环境是1.8,出现了这个异常,故Eclipe当前项目的三处都修改为1.7后问题解决】
然后,终于,项目可以在 windows 的 独立 Tomcat中正常启动了。 =========================================================================== 现在是项目可以在Eclipse及本地Tomcat中正常运行,但是将其拷贝到Linux中运行,就会报错 【直接访问启动完的Tomcat的8080端口号也是没问题的,但是加上项目路径/dc2就会报错】 查看日志,报错如下:

 【同样,第一行异常信息不用管,Tomcat启动项目报错基本都会抛这个异常,重点看 caused by后的内容

 

java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironment

各种百度,均不能解决问题,但根据百度信息可以推断出很大可能是 spring的jar包有问题。 后来同事找到解决方法: 删除项目中的一个 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包,同时注释掉报错的代码及其关联代码:

 =============================================

上面异常启发

如果遇到在Eclipse和本地Tomcat独立启动项目两种方式都没有问题,但是部署到linux系统中就会启动项目报错的现象, 1、首先 检查项目中是否有关于linux的特殊配置或代码,如果各个地方都没有问题,那么就可以考虑 2、是否是jar包的问题(比如jar包冗余、冲突、互相不匹配等),根据上面的例子就可以猜测出,linux下Tomcat启动项目和windows中启动项目加载jar包的方式(或者说代码中调用/检查各个jar包依赖的方式)两者可能是有细微区别的,这就有可能导致上述异常发生。 3、检查项目中jar包问题(冗余、冲突、互相不匹配等),首先要从特殊的jar包开始,   a、比如原来项目没有这个问题,现在有了,那么就优先考虑最近引入的jar包(最近引入的功能代码等)。     eg:本例子就是,原来是没有这个问题的,正是由于最近加入了定时任务新功能而且引入了jar包,才导致这个问题。   b、还可以检查某一类jar包的版本号,从最特殊的版本号开始。     eg:本例也是,从lib目录中jar包截图可以看出,所有关于spring的jar包几乎都是3.0的,只有一个是5.0,所以5.0这个就是相对特殊的,是重点要排查的【排查方式很简单:先干掉它启动试试即可】。

 

转载于:https://www.cnblogs.com/libin6505/p/10376376.html

你可能感兴趣的文章
互联网协议入门(一)
查看>>
16_Python变量作用域_Python编程之路
查看>>
js index of()用法
查看>>
XSS原理及防范
查看>>
WPF中Image显示本地图片
查看>>
SVN版本管理
查看>>
哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
查看>>
Windows Phone 7你不知道的8件事
查看>>
脚本删除文件下的文件
查看>>
实用拜占庭容错算法PBFT
查看>>
java b组 小计算器,简单计算器..
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php libevent 定时器,PHP 使用pcntl和libevent实现Timer功能
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
matlab fis编辑器在哪,基本FIS编辑器
查看>>
linux的串口子系统,TTY子系统
查看>>
修改linux远程22端口,linux修改ssh远程端口22
查看>>
Linux系统的创始者,组图:Linux之父的办公室首度曝光
查看>>
关于linux的环境变量设置,linux环境变量设置
查看>>
socket模块,简单的套接字,加循环
查看>>