一个老的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标签中多了一个这个标签

<Context path="" docBase="。。。。。。。。。。 />
里面有个 eclipse的引用,直接把这行标签删掉,再次启动,异常改变了。说明刚才的异常解决了。===============================上面异常的启发1、遇到任何异常信息,即使是自己没见过的异常信息,一般都是 根据当前这段异常中最后一个 caused by 后面的内容,来检索问题原因。2、在有些版本的eclipse中,在eclipse中配置过的本地Tomcat,有可能会在本地Tomcat目录下的server.xml配置文件中的host标签中自动生成 <Context docBase=“xxx”的标签,这时如果再把项目直接放到wabapps目录下,直接从Tomcat的bin目录启动(不用Eclipse),那么就会出现启动不起来,报错的情况。==============================================

启动后还是报错,现在的异常是有两处报:

Unsupported major.minor version 52.0解决办法

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

Project facet jst.web.jstl has not been defined.

解决方法,参见上文。
原来项目最早用的是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

Eclipse启动项目正常,放到tomcat下单独启动就报错的 一例相关推荐

  1. eclipse Maven项目发布到Tomcat下classes文件夹却没有子模块的编译类

    解决方法: 1,在主项目上右键--Properties--Java Build Path 2,点击Link Source 3 , 点击Browse选择子项目的target----classes文件夹- ...

  2. war包放到webapps下,启动tomcat,tomcat正常,却无法加载项目

    由于工作需要,打war包,放到webapps下,启动tomcat,地址栏输入项目路径报错404 1.先确认tomcat是否正常启动:可以正常显示tomcat的图标,tomcat正常启动. 2.查看to ...

  3. linux部署tomcat项目404_一个tomcat下部署多个项目或一个服务器部署多个tomcat

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] ♪ 点击上方绿标 收听一个tomcat下部署多个项目或一个服务器部署多个tomcat 最近需要把两个项目同时部署到服务器上,于是研究了一下 ...

  4. 用Eclipse远程调试部署在Tomcat下的Web应用程序

    今天同事告诉了我一个用Eclipse远程调试部署在Tomcat下的Web应用程序的方法: 安装解压版本的Tomcat,因为现在好像Tomcat的Windows安装版目录下没有catalina.sh(. ...

  5. 使用idea打包war包和maven项目打包war包放到tomcat中运行,以及报404错误的解决

    使用idea打包war包和maven项目打包war包放到tomcat中运行,以及报404错误的解决 在tomcat下运行打包的war包,访问时显示404 浅谈打包war包的方式 第一种: 第一步: 第 ...

  6. 解决导入maven项目之后pom.xml中的project标签报错:批量删除没有下载完全的pom依赖bat脚本

    报错现象: 导入maven项目之后pom.xml中的project标签报错. 问题原因: 这个项目我来来回回导入的很多次,有些依赖没有下完全,只下了一半.当我再一次导入该项目时,那些没有下载完全的依赖 ...

  7. eNSP:当电脑从win10升级到win11,却发现启动虚拟设备(路由或防火墙)时出现报错,报错代码为40,如何解决?

    背景描述: 如何解决"当电脑从win10升级到win11,却发现启动虚拟设备(路由或防火墙)时,出现报错,报错代码为40"的问题呢?基于电脑升级win11,启动虚拟设备尤其是路由和 ...

  8. Python3.5 win10环境下导入kera/tensorflow报错的解决方法

    这篇文章主要介绍了Python3.5 win10环境下导入keras/tensorflow报错的解决方法,较为详细的分析了Python3.5在win10环境下导入keras/tensorflow提示错 ...

  9. centos7 如何重启web服务_centOS7下重启网络服务报错

    用户提问 实体机上安装的centOS7 在安装centOS7时并没有设置过任何网络的东西. 使用systemctl retart network.service或service network sta ...

最新文章

  1. java 判断非ascii字符_文件名中的JavaMail和非ASCII字符
  2. 科普 | 同一个世界,地图有这么多不同的表达!
  3. 深度学习平台你知道多少?
  4. Xamarin iOS教程之申请付费开发者账号下载证书
  5. Arduino方式开发ESP32笔记:使用Preferences保存数据
  6. c++ primer 5th,练习11.19,编写代码验证
  7. linux分区压力测试,stress-Linux系统压力测试工具使用及系统负载很高的几种场景测试...
  8. AngularJS入门(用ng-repeat指令实现循环输出)
  9. python 获取硬盘信息_使用python获取电脑的磁盘信息方法
  10. mysql连接外部数据库名字错误_数据库连接出错! 可能出错原因:数据库位置或名称不对、数据库损坏!...
  11. JavaScript由浅到深【含案例源码】
  12. java中==与equal()的区别
  13. 提高工作效率的黑科技软件(二)
  14. 华为太极magisk安装教程_华为(HUAWEI)ROM安装包合集
  15. IOS开发之——数据库-Couchbase(05)
  16. 软考软件设计师中级考试(二)——操作系统基本原理
  17. ognl.OgnlException: target is null for setProperty(null, offset, [Ljava.lang.String;@1667f3c) 解决方法
  18. python解决中文显示问题Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from current font. func(*args)
  19. 小白对于Linux的学习
  20. Java Web实战详细教程(十一)贯穿项目搭建+CSS修饰前端页面

热门文章

  1. 记录一次硬盘迁移过程
  2. 【资源分享】谷粒商城课件
  3. 亚洲名人人脸数据库制作
  4. 乐观锁常见的两种实现方式
  5. flipclock开发手册_[转载]FlipClock.js时钟,计数,3D翻转插件
  6. 爬虫-urllib简介urlopen函数重要参数学习
  7. 程序员与年龄:人到中年不得已!程序员到了三四十岁该怎么办?
  8. State Threads
  9. 水墨-在线 Markdown 编辑器
  10. 中文分词——知更鸟分词(RS)设计与实现