一个老的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这个就是相对特殊的,是重点要排查的【排查方式很简单:先干掉它启动试试即可】。

Eclipse启动项目正常,放到tomcat下单独启动就报错的 一例的更多相关文章

  1. 2016.6.21 将Eclipse中项目部署到tomcat下

    新建的web项目,各种都配置好,选择run on server之后,发现运行失败,并不能访问需要的网址.而脱离eclipse,将生成的war文件直接放到tomcat的webapp下时,可以正常访问.所 ...

  2. 在tomcat下直接访问Html报错,说找不到资源(404)

    今天由于工作需要,想把一个html直接放到tomcat(干净的tomcat,没有做过任何修改.)下进行访问,然后根据经验就直接在webapps下创建了个文件夹test,然后把需要的test.html拷 ...

  3. java 运行项目不放到tomcat下的webapps文件夹下放到自己建的文件夹中的处理办法

    你需要在tomcat跟目录下的conf/server.xml中进行配置,配置方法如下: <Context path="/Project" docBase="D:\s ...

  4. CentOS6.5_x64安装MySQL-5.6.17,在已经启动MySQL服务的情况下,出现密码报错ERROR 2002 (HY000)

    1.修改MySQL配置文件,使MySQL登陆时跳过密码验证 skip-grant-tables 2.重启MySQL服务 service mysql restart 3.进入MySQL,修改user表中 ...

  5. MyEclipse 开发 Web项目发布到 Tomcat 下的Root 目录

    通常情况下,Web项目是发布到Tomcat下的webapps文件目录下的 . 例如:Web应用项目名称为:stock,则部署到tomcat后,是部署在tomcat/webapps/stock中,网址为 ...

  6. 使用spring等框架的web程序在Tomcat下的启动顺序及思路理清

    大牛请绕过,此文仅针对自己小白水平,对web程序的启动流程做个清晰的回顾. 一.使用spring等框架的web程序在Tomcat下的启动流程 1)Tomcat是根据web.xml来启动的.首先到web ...

  7. Maven Web项目部署到Tomcat下问题

    但是也遇到了很多问题,下面记录一下Web项目部署到Tomcat下的问题 1.普通的WEB项目,就是虽然是用maven搭建的,但是没有使用profiles.xml文件来配置参数.这样的项目可以通过以下的 ...

  8. django之创建第7-3个项目-在站点blog下单独创建urls.py文件

    1.在站点blog下单独创建urls.py文件 # -*- coding: UTF-8 -*- from django.conf.urls import patterns, include, url ...

  9. 解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错

    解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错 Neither the JAVA_HOME nor the JRE_HOME environment var ...

随机推荐

  1. 《FPGA设计技巧与案例开发详解-第二版》全套资料包

    本人参与写的一本书(TimeQuest一章由我所写),希望大家多多支持: 全书配套资料上传各大网盘资料中附送大量源码,你值得拥有--<FPGA设计技巧与案例开发详解-第二版>全套资料包-V ...

  2. 汇编 REPE/REPZ 指令,CMPSB指令

    知识点: REPE/REPZ 指令 CMPSB 指令 一.CMPSB //cmp //sub //SCASB//scasw//scasd cmp byte ptr [edi],al //对标志位的 ...

  3. 继承类中static数据值

    class A{ static int num = 1; public static void Display(){ System.out.println( num ); } } class B ex ...

  4. how2j 的shiro教程初探

    教程案例里的mysql连接器只支持mysql,不支持mariadb,如果用的不是mysql,创建连接时会报错.

  5. 新员工入门 - for测试

    23456人员介绍 XXX 测试工作 [软件] Chrome 浏览器.jsonviewer.Firefox.FireBug HTTP协议与抓包 - fildder.wireshirk等 DB查询工具 ...

  6. 利用Kinect实现用指尖隔空控制鼠标(源码放出)

    简介 此程序为利用Kinect实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那个项目中鼠标的click是通过一种特殊的方式实现的,因此这个程序只实现了用手控制鼠标的移动,并没有点击的功能. ...

  7. sql注入语句整理

    1.判断有无注入点; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等..and 0<>(select ...

  8. 微软职位内部推荐-Software Development Engineer II_Commerce

    微软近期Open的职位: Are you looking for a high impact project that involves processing of billions of dolla ...

  9. About The Algorithm Simplification

    For mode 1, you have to ergod all the data in the files. So the key point to solve this problem is t ...

  10. TeamWork#3,Week5,Release Notes of the Alpha Version

    在这里的是一款你时下最不可或缺的一款美妙的产品. “今天哪家外卖便宜?” “今天这家店在哪个网站打折?” “这家店到底哪个菜好吃?” 这些问题你在寝室/办公室每天要问几次?还在为了找一家便宜的外卖店而 ...