一个老的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. 【WPF】数据验证

    原文:[WPF]数据验证 引言      数据验证在任何用户界面程序中都是不可缺少的一部分.在WPF中,数据验证更是和绑定紧紧联系在一起,下面简单介绍MVVM模式下常用的几种验证方式. 错误信息显示 ...

  2. ajax传递数组给controller的实现方法和坑

    这里是前端向后端传递一个数组的方式,参考下面这个示例: (主要是将前端的数组,用 JSON.stringify() 方法json化一下,然后后端springmvc接收到以后,使用 JSONArray  ...

  3. python数据图形化—— matplotlib 基础应用

    matplotlib是python中常用的数据图形化工具,用法跟matlab有点相似.调用简单,功能强大.在Windows下可以通过命令行 pip install matplotlib 来进行安装. ...

  4. chrome下的Grunt插件断点调试——基于node-inspector

    之前调试grunt插件时,都是通过人肉打log来调试.不仅效率低,而且会产生一堆无用的代码.于是简单google了下node断点调试的方法,总结了下. 借助node-inspector,我们可以通过C ...

  5. css怎样去掉多个Img标签之间的间隙

    在写css的时候经常会遇到这样的情况,两张宽度加起来是2n的图片,在宽度为2n的容器中放不下,这是因为两张图片之间有一段间隙的缘故,产生这种现象的原因是浏览器把两个img标签之间的空格当成了空白节点. ...

  6. jmeter实战1

  7. HDU 6081 度度熊的王国战略(全局最小割Stoer-Wagner算法)

    Problem Description 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更 ...

  8. 《Linux内核 》MOOC 课程

    姬梦馨 原创微博 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习笔记 一:什么是冯诺依曼体系结构? ...

  9. Android map转json格式,附上Jackson包下载地址,导入过程

    android中的map转json,需要下载jackson包,下载地址: http://www.java2s.com/Code/Jar/j/Downloadjacksonall199jar.htm 下 ...

  10. 对比网络模拟器软件——Cisco Packet Tracer、华为eNSP、H3C Cloud Lab

    1.软件介绍 1.1 Cisco Packet Tracer Cisco Packet Tracer(以下简称PT)是一款由思科公司开发的,为网络课程的初学者提供辅助教学的实验模拟器.使用者可以在该模 ...