一、问题出现的场景:

一个Spring boot项目,使用log4j打印日志,在windows tomcat中部署正常启动,但是在linux系统中部署到tomcat 中时报了如下的错误:java.io.IOException: java.lang.ClassCastException: Cannot cast ch.qos.logback.classic.servlet.LogbackServletContainerInitializer to javax.servlet.ServletContainerInitializer

at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:185)

at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:151)

at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1597)

at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1125)

at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:768)

at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)

at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)

at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5058)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:697)

at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)

at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1780)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Caused by: java.lang.ClassCastException: Cannot cast ch.qos.logback.classic.servlet.LogbackServletContainerInitializer to javax.servlet.ServletContainerInitializer

at java.lang.Class.cast(Class.java:3369)

at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:182)

... 19 more

二、寻求解决问题的道路

看报错提示很明显,一开始以为是jar引入冲突造成的,可以分析了Pom.xml文件和application.properties文件发现,并没有明显的引入jar和配置错误啊,甚至我都没引入log4j的依赖(Spring boot框架默认继承的父类pom.xml中已经引入了相关的依赖,如下图)

那么这就奇怪了,明明父类中已经引入了logging依赖,为啥还会强行转换为 javax.servlet.ServletContainerInitializer呢?

首先想到的是度娘,搜索了很久,很失望的发现,根本没有能帮助我解决问题的文章啊,于是去google上搜索该问题,找到了一篇文章,说linux下tomcat 运行 maven项目时加载的jar有一个优先级,可能会把apach-tomcat下lib下的jar先加载上,于是我去搜索如何修改tomcat加载jar优先级的方法,感觉绝望的是,只是找到了一些关于tomcat加载jar优先级的文章:tomcat中加载class和jar优先级,但是却没有如何修改这个优先级的文章;感觉自己找错了方向,于是再次回去翻阅google上查到的文章,再次会想起上文报的错误,忽然想到,能不能在pom.xml中直接屏蔽下面的这个类呢?javax.servlet.ServletContainerInitializer

于是我尝试在pom.xml的下面位置加上了一段代码:

以屏蔽打包时打入servlet.api.jar

javax.servlet

servlet-api

2.5

provided

clearn 后再次install打包,部署,OK,终于成功。

linux部署jar项目报错_Spring boot项目部署linux系统tomcat报错解决办法相关推荐

  1. oracle插入时间报错,Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法...

    一.写sql的方式插入到Oracle中 往oracle中插入时间  '2007-12-28 10:07:24' 如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07 ...

  2. java web jsp servlet项目如何转换为spring boot项目

    问题描述一:老项目jsp都是在WebContent目录下,servlet在web.xml中配置,而springboot项目这二个目录都不存在. 问题描述二.如何将已有javaweb项目改造为Sprin ...

  3. python的moviepy库 打包 报错: ‘moviepy.audio.fx.all‘ has no attribute ‘audio_fade 的解决办法

    本篇文章主要讲解python的moviepy库 打包 报错: 'moviepy.audio.fx.all' has no attribute 'audio_fade 的解决办法 日期:2022年3月9 ...

  4. idea创建springboot项目+mybatis_从spring boot项目创建到netty项目过渡1

    本文要讲解三点 1 spring boot 项目创建 2 spring boot 项目基础上面创建netty项目(下一篇) 3 netty websocket支持wss以及配置负载均衡(下一篇) No ...

  5. Pycharm报错:AttributeError: ‘NoneType‘ object has no attribute ‘_gdal‘的解决办法

    Pycharm报错:AttributeError: 'NoneType' object has no attribute '_gdal'的解决办法 解决办法如下: pycharm找到settings ...

  6. ajax上传文件报错The current request is not a multipart request的解决办法

    ajax上传文件报错The current request is not a multipart request的解决办法 主要报错语句为: The current request is not a ...

  7. form编译报错:ORA-12162: TNS:net service name is incorrectly specified解决办法

    form编译报错:ORA-12162: TNS:net service name is incorrectly specified解决办法 编译命令 apps/apps密码后面+"@数据库i ...

  8. navicat for mysql执行sql语句报错: [Err] 1146 - Table ‘performance_schema.session_status‘doesn‘t exist 解决办法

    navicat for mysql执行sql语句报错: [Err] 1146 - Table 'performance_schema.session_status' doesn't exist 解决办 ...

  9. VS报错:fatal error LNK1104: 无法打开文件“kernel32.lib”解决办法

    VS报错:fatal error LNK1104: 无法打开文件"kernel32.lib"解决办法 问题所在 解决方案一 解决方案二 问题所在 我使用VS是运行Fortran程序 ...

最新文章

  1. Windows Phone开发(48):不可或缺的本地数据库
  2. 内核中设置文件结束符_Linux 日志文件系统原来是这样工作的
  3. DNS Tunneling及相关实现——总之,你发起攻击都需要一个DNS server,下载一些工具作为client发起数据,server收集数据并响应...
  4. charles 安装 ssl_charles抓包配置
  5. pytest框架_Python最火的第三方开源测试框架——pytest
  6. java 8 删选集合 和取集合中的字段重组成集合的使用
  7. 4)机器学习基石笔记 Lecture4:Feasibility of Learning
  8. Spring Cloud实战Zuul统一异常处理
  9. 阿里云apache配置php mysql_阿里云CentOS7搭建Apache+PHP+MySQL环境
  10. JVM笔记——技术点汇总
  11. 【T+】畅捷通T+软件打印预览凭证或UFO生成报表 提示加载TBillOneCore.dll失败
  12. cpu飙高1000,几近崩溃
  13. 总结移动开发入行十周年
  14. 不可多得的MBA相关书籍推荐
  15. allegro 04_B class和subclass介绍
  16. 一起来捉妖找不到服务器,一起来捉妖妖怪分布大全 所有妖灵不同地点位置详解...
  17. pcie ecam --- Linux kernel 实现欣赏
  18. 2020-04-19-E-prime2.0.10安装过程
  19. 硕士生论文存在的问题
  20. 解决微信公众号发布新的版本H5页面有缓存的问题

热门文章

  1. C++基础03-C++对c的拓展-函数
  2. 利用openpyxl,Python对excel读写文件
  3. 【FFMPEG】【ARM-Linux开发】 ffmpeg 静态库使用,undefined reference错误
  4. autoitv3点击windows界面
  5. Xilinx实习一年总结
  6. UIMenuController在label中的使用
  7. ASP.NET 页生命周期
  8. Linux shell脚本全面学习
  9. ASP.NET 网站路径
  10. MC.9 与 LIS