设为首页 收藏本站
查看: 1749|回复: 0

[经验分享] Tomcat启动失败:java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager

[复制链接]

尚未签到

发表于 2017-12-25 09:41:43 | 显示全部楼层 |阅读模式
  项目开发中发现服务器上Tomcat启动失败
  开始定位
  第一步:打开tomcat日志catalina.log:
  

2017-07-25 17:02:43,799 [Catalina-startStop-1] ERROR org.apache.catalina.core.ContainerBase - A child container failed during start  
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[
/yxicadmin]]  at java.util.concurrent.FutureTask.report(FutureTask.java:
122)  at java.util.concurrent.FutureTask.get(FutureTask.java:
188)  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:
1122)  at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:
819)  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:
150)  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:
1574)  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:
1564)  at java.util.concurrent.FutureTask.run(FutureTask.java:
262)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:
1145)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:
615)  at java.lang.Thread.run(Thread.java:
745)  
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[
/yxicadmin]]  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:
154)  ...
6 more  
Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava
/lang/Class;)Lorg/apache/tomcat/util/res/StringManager;  at org.apache.tomcat.websocket.WsWebSocketContainer.
<clinit>(WsWebSocketContainer.java:77)  at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:
131)  at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:
47)  at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:
5506)  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:
150)  ...
6 more  

2017-07-25 17:02:43,802 [main] ERROR org.apache.catalina.core.ContainerBase - A child container failed during start  
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
  at java.util.concurrent.FutureTask.report(FutureTask.java:
122)  at java.util.concurrent.FutureTask.get(FutureTask.java:
188)  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:
1122)  at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:
300)  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:
150)  at org.apache.catalina.core.StandardService.startInternal(StandardService.java:
443)  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:
150)  at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:
739)  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:
150)  at org.apache.catalina.startup.Catalina.start(Catalina.java:
689)  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
57)  

  找到关键点:java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager;
  虽然不清楚是什么原因,不过很奇怪的是本地项目是能跑起来的。看了下测试机tomcat版本是7.0.56,本地是7.0.68,难道和这个有关?
  第二步:判断是否和tomcat版本有关:
  下载了一个7.0.56版本的tomcat,在本地运行,果不其然,也复现了该错误。然而是不是和tomcat有关呢?这个不不能确定,但是有一点是可以肯定的,测试机tomcat版本替换难度较大,而且还要所有环境版本同步,这个代价较大,因此转换思路,是否是类冲突了呢。。
  开始百度
  第三步:发现关键原因:类冲突
  网上查找类似错误,有前辈遇到了,并且分析了原因:Springboot内嵌tomcat8,与tomcat7冲突,突然意识到这个需求引入了部门其他同事提供的Jar包,难道是那个Jar包导致的。。
  OK,那我们验证下,先使用maven命令:mvn dependency:tree 输出下maven依赖树:
  发现关键点:
  

[INFO] +- com.xxx.xxx.xx:xxx-client:jar:1.0-SNAPSHOT:compile  
[INFO]
|  +- com.netease.mail.dp:dqs-model:jar:1.0-SNAPSHOT:compile  
[INFO]
|  +- org.apache.commons:commons-lang3:jar:3.4:compile  
[INFO]
|  +- commons-httpclient:commons-httpclient:jar:3.1:compile  
[INFO]
|  +- org.springframework.boot:spring-boot-starter-web:jar:1.5.1.RELEASE:compile  
[INFO]
|  |  \- org.springframework.boot:spring-boot-starter:jar:1.5.1.RELEASE:compile  
[INFO]
|  |     +- org.springframework.boot:spring-boot:jar:1.5.1.RELEASE:compile  
[INFO]
|  |     +- org.springframework.boot:spring-boot-autoconfigure:jar:1.5.1.RELEASE:compile  
[INFO]
|  |     \- org.springframework.boot:spring-boot-starter-logging:jar:1.5.1.RELEASE:compile  

  果然,这个XXXJar包引用了org.springframework.boot:spring-boot-starter-web
  试着使用网上的办法去掉spring-boot-starter-web依赖的spring-boot-starter-tomcat Jar包,没用
  于是直接粗暴点:
  

<dependency>  <groupId>com.xxx.xxx.xxx</groupId>
  <artifactId>xxx-client</artifactId>
  <version>1.0-SNAPSHOT</version>
  <exclusions>
  <exclusion>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  </exclusion>
  <exclusion>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-el</artifactId>
  </exclusion>
  <exclusion>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-websocket</artifactId>
  </exclusion>
  </exclusions>
  
</dependency>
  

  重新打包运行,问题解决。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427751-1-1.html 上篇帖子: 用Apache配置多个域名的方法(绝对成功!) 下篇帖子: 解决kylin sync table报错:MetaException(message:java.lang.ClassNotFoundException Clas
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表