日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2025/3/15 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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报错解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。