linux部署jar项目报错_Spring boot项目部署linux系统tomcat报错解决办法
一、問題出現的場景:
一個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报错解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BUUCTF-Reverse:rever
- 下一篇: 刘教授的Linux操作系统考试复习题