當前位置:
首頁 > 最新 > 項目總結之maven衝突

項目總結之maven衝突

描述

今天遇見了一個相對而言有點奇葩的問題,一個pom文件的依賴配置,如果是以下配置的話:

image.png

則發布成功,一點問題都沒有,如果是以下配置的話:

則會拋出以下異常:

通過師兄的指點加上多方查證了解到是依賴衝突了,現在具體描述下查證的過程:

由以上的堆棧異常可以看出,在載入依賴的時候javax.servlet.ServletContext少了個getVirtualServerName()函數,於是我定位到tomcat-embed-core-8.5.14.jar這個依賴下

發現tomcat-embed-core-8.5.14.jar這個依賴下的ServletContext是有getVirtualServerName函數的,那麼為什麼這裡還提示找不到呢?我猜測是因為jar包衝突,在載入tomcat-embed-core-8.5.14.jar下的ServletContext之前就先載入了其他jar包的ServletContext了,於是查找了相關的依賴,在:

找到了ServletContext介面,確實是沒有getVirtualServerName這個函數,跟我上面的預想基本一致。

那麼問題來了,為什麼反過來就可以了?

於是我又去谷歌了,得知以下兩個知識點:1、依賴路徑最短優先原則一個項目Demo依賴了兩個jar包,其中A-B-C-X(1.0) , A-D-X(2.0)。由於X(2.0)路徑最短,所以項目使用的是X(2.0)。2、pom文件中聲明順序優先如果A-B-X(1.0) ,A-C-X(2.0) 這樣的路徑長度一樣怎麼辦呢?這樣的情況下,maven會根據pom文件聲明的順序載入,如果先聲明了B,後聲明了C,那就最後的依賴就會是X(1.0)。

於是我總結到,應該是依賴路徑長短一樣,導致跟pom文件中聲明的順序有關。

相信很多人和我一樣,在猶豫如何查找依賴路徑,以下推薦一種:

使用Intellij idea,想看看它的maven依賴圖,打開的pom.xml文件,在pom文件內容上右鍵Diagrams–Show Dependencies,就可以看到了。如:

由圖也可以看出,依賴路徑也確實一樣。

總結:遇見問題要大膽的去請教,通過系統反饋的異常深入的研究問題出在哪裡,而不只是解決了問題就好!

Note:發布的這些文章全都是自己邊學邊總結的,難免有紕漏,如果發現有不足的地方,希望可以指出來,一起學習咯,么么噠。開源愛好者,相信開源的力量必將改變世界:osc :https://git.oschina.net/xi_fan

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 安卓網 的精彩文章:

不花一分冤枉錢,這3款千元機性價比太殘暴!
想要更好的雲基礎設施管理!你檢查IT工具集了嗎?
個性風的蘋果手機殼,專屬於蘋果手機
這次真的來了!一加5首次官方亮相!
跨境電商賣家如何決定是否在某平台進行銷售

TAG:安卓網 |

您可能感興趣

如何成為 Apache 項目的 committer
Collective 項目揭幕
繼Aquila之後,Facebook宣布砍掉另一個空中聯網無人機項目Tether
springboot項目初始化
Andromeda項目:Surface Phone或以另外形式亮相
Consensus大會對QuarkChain的深度十問,為你帶來項目的最新進展
項目簡說之block collider
kindeditor項目集成
為刺激VR/AR領域發展 Digital Catapult再次啟動Augmentor項目
Exchange Union項目進展
flask 項目中使用 bootstrapFileInput
Mozilla期望Firefox Fission項目能瓦解Spectre漏洞攻擊
Essentium、易生和Polymaker加入「Ultimaker材料聯盟項目」
Kickstarter升級Hardware Studio:讓投資者知道眾籌項目發展進度
Origin Protocol項目短評
Viptela+Cisco首個項目落地聯想
使用Jira software+Structure實現大規模跨團隊項目管理
Python web開發:Flask的項目配置
SpringBoot如何進行項目打包部署
軟體定義網路項目OpenContrail改名為Tungsten Fabric