Maven依賴沖突解決

背景

在部署一個spring-boot項目到遠程測試機上的tomcat之后毙玻,發(fā)現(xiàn)tomcat并沒有啟動起來础米,讓我折騰了近2個小時其骄,現(xiàn)在將解決思路以及解決方法記錄下來啃奴,下次在遇到Maven依賴沖突之后草则,能夠很快的解決钢拧。

解決思路

查看tomcat日志

因為tomcat啟動失敗,所以首先查看tomcat打印出來的相關日志炕横。

tail -n 500 {TOMCAT_HOME}/logs/catalina.2017-08-08.log

里面確實有錯誤日志源内,其中這個錯誤日志引起的我的注意。

Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from file:/export/App/apache-tomcat-8.5.16/webapps/k8s-api/WEB-INF/lib/slf4j-log4j12-1.7.5.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml Object of class [org.slf4j.impl.Log4jLoggerFactory] must be an instance of class ch.qos.logback.classic.LoggerContext
    at org.springframework.util.Assert.isInstanceOf(Assert.java:346)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:221)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLogger(LogbackLoggingSystem.java:213)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:98)
    at org.springframework.boot.logging.LoggingApplicationListener.onApplicationStartedEvent(LoggingApplicationListener.java:216)
    at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:198)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:163)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:136)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:119)
    at org.springframework.boot.context.event.EventPublishingRunListener.publishEvent(EventPublishingRunListener.java:111)
    at org.springframework.boot.context.event.EventPublishingRunListener.started(EventPublishingRunListener.java:60)
    at org.springframework.boot.SpringApplicationRunListeners.started(SpringApplicationRunListeners.java:48)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
    at org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:149)
    at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:129)
    at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:85)
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 10 more

關鍵的信息在這里

LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from file:/export/App/apache-tomcat-8.5.16/webapps/k8s-api/WEB-INF/lib/slf4j-log4j12-1.7.5.jar).

大概就是說Logback已經在classpath中存在份殿,這時候就應該意識到有Logback依賴沖突膜钓,在多個地方都有Logback的依賴塔鳍。

我的pom.xml文件如下

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        ...
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

使用maven命令,查看依賴樹

mvn dependency:tree

查看結果

[INFO] +- org.springframework.boot:spring-boot-starter:jar:1.3.3.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot:jar:1.3.3.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.3.3.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-logging:jar:1.3.3.RELEASE:compile
[INFO] |  |  +- ch.qos.logback:logback-classic:jar:1.1.5:compile
[INFO] |  |  |  \- ch.qos.logback:logback-core:jar:1.1.5:compile
[INFO] |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.5:compile
[INFO] |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.5:compile
[INFO] |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.5:compile
[INFO] |  +- org.springframework:spring-core:jar:4.2.5.RELEASE:compile
[INFO] |  \- org.yaml:snakeyaml:jar:1.16:compile
...
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.5:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.5:compile

可以從上面的結果中很清楚的看見org.slf4j:log4j-over-slf4j:jar:1.7.5這個包沖突了呻此,所以我們只需要去掉其中一個Logback的依賴即可轮纫。

解決依賴沖突

如下方法可以去掉多余的依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

再重新啟動tomcat,成功焚鲜。

注意

在執(zhí)行mvn的命令掌唾,如update,install之前忿磅,必須要先clean一下糯彬,否則可能會有之前的依賴還保留在里面。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末葱她,一起剝皮案震驚了整個濱河市撩扒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吨些,老刑警劉巖搓谆,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豪墅,居然都是意外死亡泉手,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門偶器,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斩萌,“玉大人,你說我怎么就攤上這事屏轰〖绽桑” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵霎苗,是天一觀的道長姆吭。 經常有香客問我,道長叨粘,這世上最難降的妖魔是什么猾编? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮升敲,結果婚禮上答倡,老公的妹妹穿的比我還像新娘。我一直安慰自己驴党,他們只是感情好瘪撇,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般倔既。 火紅的嫁衣襯著肌膚如雪恕曲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天渤涌,我揣著相機與錄音佩谣,去河邊找鬼。 笑死实蓬,一個胖子當著我的面吹牛茸俭,可吹牛的內容都是我干的。 我是一名探鬼主播安皱,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼调鬓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酌伊?” 一聲冷哼從身側響起腾窝,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎居砖,沒想到半個月后虹脯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡悯蝉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年归形,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鼻由。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厚棵,靈堂內的尸體忽然破棺而出蕉世,到底是詐尸還是另有隱情,我是刑警寧澤婆硬,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布狠轻,位于F島的核電站,受9級特大地震影響彬犯,放射性物質發(fā)生泄漏向楼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一谐区、第九天 我趴在偏房一處隱蔽的房頂上張望湖蜕。 院中可真熱鬧,春花似錦宋列、人聲如沸昭抒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灭返。三九已至盗迟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熙含,已是汗流浹背罚缕。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怎静,地道東北人邮弹。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像消约,于是被迫代替她去往敵國和親肠鲫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理或粮,服務發(fā)現(xiàn)导饲,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 一氯材、maven自己調節(jié)原則1.第一申明優(yōu)先原則.誰先依賴就導入誰的jar包2.路徑近者優(yōu)先原則直接依賴比傳遞依賴大...
    zl1995閱讀 642評論 0 0
  • 依賴沖突解決辦法 maven 的價值 Java開發(fā)中渣锦,jar的管理由maven來管。maven做的事情: jar統(tǒng)...
    區(qū)影閱讀 10,245評論 0 10
  • 問題 在項目啟動時氢哮,發(fā)現(xiàn)打印了大量的debug日志袋毙,但是src/main/resources下明明有l(wèi)og4j.x...
    Mr胡桃閱讀 21,971評論 2 11