精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

好機會,我要幫女同事解決Maven沖突問題

開發 前端
其實在工作中經常會遇到這種沖突的問題,比如:Caused by:java.lang.NoSuchMethodError 這個異常信息也是沖突導致的,想要解決沖突問題就必須得知道哪里沖突了(好像是廢話)。大部分都是用 Maven 來管理依賴的 Jar,今天這篇文章主要是講解如何解決 Maven 帶來的依賴沖突問題。

任何一個故事起因最重要

任何一個職業,女生都有絕對的優勢。更別提 IT 行業了,在部門中要是有女程序猿那肯定是香餑餑,備受呵護呀。

 

 

 

[[314872]]

 

之前有一次,一位剛來的妹子遇到問題了,畫風頓時就變成上面的圖片了,群起而圍之,但是最后的結果并不理想,還是得我出馬(此處有點小吹牛)。

妹子遇到的是 Jar 包沖突的問題,錯誤信息是 Caused by: java.lang.ClassNotFoundException,看錯誤要么就是缺少某個 Jar 包,要么就是沖突了。

其實在工作中經常會遇到這種沖突的問題,比如:Caused by:java.lang.NoSuchMethodError 這個異常信息也是沖突導致的,想要解決沖突問題就必須得知道哪里沖突了(好像是廢話)。

大部分都是用 Maven 來管理依賴的 Jar,今天這篇文章主要是講解如何解決 Maven 帶來的依賴沖突問題。

Maven 回顧

Maven 自述

Maven 是用于構建和管理 Java 項目的工具。對于 Java 方向的來說,Maven 幾乎都要接觸和使用。當然也有其他的工具來代替 Maven,比如 Ant 和 Gradle。

之前有接觸過 Grails 構建的 Java Web 項目,就是用 Gradle 來做依賴管理的。至于 Ant 也在剛工作的時候在一些老項目中有見到過,后面幾乎沒見過了。

Maven 文檔地址:https://maven.apache.org[1]

使用 Maven 可以讓我們快速構建一個新的項目,并且很方便的可以集成和管理多個三方的框架。當我們需要某個框架時可以去搜索一下這個框架的信息,然后配置到你的項目中即可。

搜索地址:https://mvnrepository.com[2]

比如我們想要使用 Spring Boot,除了在 Spring 的文檔中獲取依賴的版本,也可以自己去搜索,選擇對應的版本,如下圖:

 

 

 

 

可以看到默認就是 Maven 的依賴方式,只需要將 dependency 整段內容復制到項目的 pom.xml 文件中即可。右側還有很多其他的依賴方式,比如 Gradle 等。

Maven 依賴傳遞

今天主要講下如何去解決 Maven 做依賴管理的時候 Jar 包沖突的問題,在解決之前先來了解下基本的知識。

 

 

 

 

上圖展示了 Maven 的依賴傳遞性,首先是項目 B 中依賴了 Spring 和 Guava 兩個框架。然后項目 A 又依賴了項目 B,所以項目 A 也會依賴 Spring 和 Guava 兩個框架。

依賴傳遞 Jar 包選擇邏輯依賴性傳遞會導致項目中依賴很多其他版本的 Jar,這種情況下怎么進行 Jar 包的選擇呢?

有兩個規則:

  • 不同距離,距離近優先
  • 相同距離,前者優先

如下圖所示,項目依賴了項目 A 和項目 B,A 和 B 分別依賴了 Guava,但是從依賴層次來看,項目 B 的層次更淺,故 Guava18.0 會被優先選擇。

 

 

 

 

當距離相同的時候,就會優先選擇定義在前面的,如下圖所示,項目 A 和項目 B 都分別依賴了 Guava15.0 和 Guava18.0 的版本,但是項目 A 的順序在項目 B 的前面,所以會優先選擇 Guava15.0 版本。

 

 

 

 

通過依賴傳遞性經常會導致 Jar 包沖突的問題,比如下圖的項目 A 本身依賴了 Guava15.0,然后又依賴了項目 B,項目 B 中依賴了 Guava18.0,這樣項目 A 就會同時依賴 Guava15.0 和 Guava18.0。

如果剛好用到了高版本不兼容低版本的方法和類時,就會出現選擇錯誤,因為 Maven 會根據依賴樹的深淺來選型淺的依賴,也就是 15.0。

 

 

 

 

沖突案例

下面就是一個典型的 Jar 包沖突問題,當一個 Jar 有多個版本的時候,就會出現沖突。

錯誤信息可以看到 com.google.common.collect.FluentIterable.concat 這個方法找不到,目前是從 guava-18.0.jar 中加載的,這種問題我們該怎么解決呢?

 

  1. Description: 
  2. An attempt was made to call the method com.google.common.collect.FluentIterable.concat(Ljava/lang/Iterable;Ljava/lang/Iterable;)Lcom/google/common/collect/FluentIterable; but it does not exist. Its class, com.google.common.collect.FluentIterable, is available from the following locations: 
  3.     jar:file:/Users/yinjihuan/.m2/repository/com/google/guava/guava/18.0/guava-18.0.jar!/com/google/common/collect/FluentIterable.class 
  4. It was loaded from the following location: 
  5.     file:/Users/yinjihuan/.m2/repository/com/google/guava/guava/18.0/guava-18.0.jar 
  6.  
  7. Action
  8. Correct the classpath of your application so that it contains a single, compatible version of com.google.common.collect.FluentIterable 

解決思路之懸絲診脈

找出沖突的 Jar,看看當前項目中依賴了哪幾個版本。

Eclipse

在 Eclipse 中可以雙擊 pom 文件,進入 Dependency 視圖,輸入你要搜索的 jar 名稱進行搜索,就可以看出當前項目中哪些框架依賴了你搜索的 jar,什么版本都能知道。

 

 

 

 

Idea

Idea 中可以安裝 maven helper 插件來查看相關依賴信息,默認選中 Conflicts 會展示當前項目存在沖突的依賴,當然我們也可以直接查看樹形的依賴關系去分析沖突。

 

 

 

 

Maven 命令

不用不借助于開發工具的插件,我們可以直接用 Maven 命令來查看當前項目的依賴關系,命令行進入到你要分析的項目目錄下,執行下面的命令將分析結果保存到文件中:

 

  1. mvn dependency:tree > tree.log 

執行完之后依賴的信息結構如下:

 

 

 

 

搜索了下 guava,發現在 smjdbctemplate 中依賴了 18.0 版本,這個框架是我自己基于 jdbctemplate 封裝的一個框架。

 

 

 

 

解決思路之察言觀色其實很明顯,錯誤信息已經告訴我們 18.0 中找不到 concat 方法,所以 18.0 肯定是不能用的,通過前面的分析,找到了直接依賴 guava.18.0.jar 的是 smjdbctemplate,解決辦法就是將 smjdbctemplate 中的 guava 排除掉。

  1. <dependency> 
  2.   <groupId>com.github.yinjihuan</groupId> 
  3.   <artifactId>smjdbctemplate</artifactId> 
  4.   <version>1.1</version> 
  5.   <exclusions> 
  6.     <exclusion> 
  7.       <groupId>com.google.guava</groupId> 
  8.       <artifactId>guava</artifactId> 
  9.     </exclusion> 
  10.   </exclusions> 
  11. </dependency> 

 

還有就是根據依賴樹的深淺度來判斷當前項目依賴的是哪個版本,如下圖:

 

 

 

 

18.0 是最淺的,肯定是依賴它,其實在 Eclipse 里面直接查看 Maven Dependencies 就可以指定當前項目依賴哪些框架和版本信息,如下圖:

 

 

 

 

當我們排除掉 18.0 后再來看依賴的版本是 20.0,如下圖:

 

 

 

 

根據依賴樹的深淺度,20.0 和 19.0 都是一樣的層級,但是 20.0 在 19.0 前面,所以優先選擇 20.0 版本。

再來看項目中的 pom 文件,發現 swagger 的聲明順序在 apollo 的前面。

 

 

 

 

如果我們把順序調整一下,那么就會依賴 19.0 的版本。

 

 

 

 

總結

通過我仔細耐心的講解,妹子終于自己解決了遇到的問題,后面的事你們就猜去吧。😆

這種問題其實無法避免,當你依賴的三方框架越多的時候,沖突的可能性就越大。碰到問題的時候沉下心來仔細分析,借助于工具幫助你排查問題。

當然我們在自己項目中去依賴三方的框架,也是要注意版本的問題,特別是對于多模塊的項目,每個子模塊都去依賴不同的版本,這樣很容易出問題,一般建議在父 pom 中 dependencyManagement 來統一管理版本,子模塊直接統一使用父 pom 中定義好的版本。

還有就是可以使用 optional 來設置可選依賴,比如說你要封裝一個通用的模塊 Common,這個模塊中有很多通用的功能,項目 A 依賴只需要使用功能 A,項目 B 依賴只需要使用功能 B。每個功能都依賴了三方的 Jar,這個時候如果你不做任何處理,只要依賴了你這個通用的模塊 Common,那么也就會間接依賴這兩個功能的第三方 Jar。這個時候可以通過設置 optional=true 來解決這個問題,我依賴了你的通用模塊 Common,如果我要使用 A 功能,那么我必須顯示依賴 A 功能需要的三方依賴才可以。

 

責任編輯:武曉燕 來源: 猿天地
相關推薦

2020-02-22 08:02:07

春節疫情防控口罩

2020-08-24 07:52:40

代理Java動態

2009-04-03 15:17:43

LinuxWindows 7機會

2009-04-04 09:36:11

Windows 7微軟操作系統

2023-10-11 12:35:29

Maven

2017-12-27 15:27:36

大數據數據建模數據支撐

2024-02-28 08:41:51

Maven沖突版本

2013-05-21 10:49:59

Windows硬件沖突

2010-02-24 16:47:22

戴爾員工性騷擾

2019-12-01 22:08:04

Mavenjar包開發

2021-04-07 22:22:10

人工智能數據軟件

2021-07-07 11:15:05

文件前端瀏覽器

2013-09-22 11:41:38

SAP

2019-08-23 11:04:29

人生第一份工作百度程序員

2010-01-12 10:28:58

C++復雜性

2009-11-12 17:24:44

無線路由器常見問題

2022-02-19 22:02:21

Redisvalue元素

2022-03-23 08:01:04

Python語言代碼

2021-05-17 08:11:24

Axios 開源項目HTTP 攔截器
點贊
收藏

51CTO技術棧公眾號

日韩美脚连裤袜丝袜在线| 色呦呦在线资源| 日本中文字幕不卡| 久久在线观看视频| 精品中文字幕在线播放| 第四色男人最爱上成人网| 中文字幕亚洲一区二区va在线| 99精品国产一区二区| 在线观看国产区| 国内精品久久久久久久97牛牛| 亚洲欧美中文日韩v在线观看| 久久婷婷中文字幕| 韩漫成人漫画| 亚洲综合成人网| 亚洲精品高清国产一线久久| 日韩在线视频第一页| 久久99在线观看| 欧美亚洲一级片| 黄色一级免费视频| 国产精品传媒精东影业在线 | 国产成人精品a视频| 美女精品网站| 97视频在线观看成人| 免费黄色激情视频| 国产欧美日韩在线一区二区 | 超碰国产在线| 91亚洲精品一区二区乱码| 国产日韩欧美影视| 无码视频在线观看| 在线亚洲伦理| 欧美劲爆第一页| 国产精品九九九九九九| 97色伦图片97综合影院| 一本色道久久综合亚洲精品小说 | 国产三区在线观看| 欧美激情一区二区| 免费日韩av电影| 全国男人的天堂网| 国产乱国产乱300精品| 国产欧美在线视频| 中文在线字幕免费观| 久久中文精品| 国产精品福利观看| 少妇又紧又色又爽又刺激视频| 裸体素人女欧美日韩| 欧美一区二区三区艳史| 日本三级小视频| 亚洲作爱视频| 69久久夜色精品国产7777| 日本在线视频免费| 国产欧美91| 人人爽久久涩噜噜噜网站| av大全在线观看| 性感少妇一区| 国产999在线| 亚洲免费视频二区| 麻豆中文一区二区| 91久久在线观看| www.色播.com| thepron国产精品| 久久青青草原| 国产人成在线视频| 国产精品国产精品国产专区不片| 伊人久久av导航| a视频在线播放| 亚洲国产精品精华液网站| 每日在线观看av| 亚洲欧洲日本韩国| 欧美综合在线视频| 日韩av自拍偷拍| 日韩视频一区二区三区四区| 亚洲国产一区自拍| 四虎永久免费在线观看| 色综合久久一区二区三区| xxxx性欧美| 久久久无码精品亚洲国产| 宅男噜噜噜66国产日韩在线观看| 国产999在线观看| 国产精品老熟女视频一区二区| 国产成人亚洲精品青草天美| 蜜桃传媒视频麻豆第一区免费观看| 国产在线视频网| 亚洲摸摸操操av| 日韩精品视频在线观看视频| 欧美日韩美女| 狠狠久久伊人| 18啪啪污污免费网站| 国际精品欧美精品| 久久综合电影一区| 青青操免费在线视频| 日韩国产精品久久久久久亚洲| 成人两性免费视频| 欧美熟妇另类久久久久久不卡 | 大黑人交xxx极品hd| 精品日韩免费| 久久久久日韩精品久久久男男| 成年人视频在线免费看| 久久99久久精品| 精品国产乱码久久久久久丨区2区| 成人精品一区二区| 亚洲一区在线播放| 国产高潮免费视频| 欧美调教在线| 操人视频在线观看欧美| 精品久久久久久久久久久久久久久久| 国产精品资源在线观看| 欧洲亚洲一区二区| av人人综合网| 欧美电影影音先锋| 蜜桃传媒一区二区亚洲av| 一区二区三区在线| 国产精品jizz在线观看麻豆| 欧美 日韩 国产 在线| 中文字幕在线一区二区三区| 92看片淫黄大片一级| 99精品在免费线中文字幕网站一区| 在线观看日韩视频| 亚洲综合图片网| 99久久综合狠狠综合久久| 黑人巨茎大战欧美白妇| 四虎精品永久免费| 在线电影欧美日韩一区二区私密| 国产欧美日韩另类| 国产成人精品网址| 国产高潮呻吟久久久| 手机看片久久| 亚洲精品久久久一区二区三区 | 欧美午夜激情视频| 激情小说欧美色图| 中文在线日韩| 成人激情综合网| 2021av在线| 91黄色免费观看| 中文人妻一区二区三区| 精品电影一区| 国产精品乱码视频| 久草成色在线| 日韩免费观看高清完整版在线观看| 顶级黑人搡bbw搡bbbb搡| 美女网站色91| 一区二区三区不卡在线| 国产亚洲人成a在线v网站| 伊人久久综合97精品| 中文字幕免费在线看| 欧美国产日韩亚洲一区| 能在线观看的av网站| 狠狠色狠狠色综合婷婷tag| 国产xxx69麻豆国语对白| 撸视在线观看免费视频| 色网站国产精品| 国产精品815.cc红桃| 日韩激情中文字幕| 樱花www成人免费视频| 亚洲精品毛片| 超碰日本道色综合久久综合| 99er热精品视频| 亚洲精品视频在线| 视频免费在线观看| 国产一区导航| 日韩国产精品一区二区| 成人av集中营| 久久影院中文字幕| 少妇av在线播放| 色综合久久久久| 懂色av蜜桃av| 国内成人自拍视频| 久久男人资源站| 日韩美女国产精品| 国产精品视频xxxx| av在线free| 亚洲国产另类 国产精品国产免费| 亚洲精品国产精品乱码| 国产日产欧美一区| 无套内谢丰满少妇中文字幕| 亚洲国产免费看| 视频一区二区三区在线观看| 国产精品成人3p一区二区三区 | 国产极品嫩模在线观看91精品| 中文字幕av日韩| 亚洲产国偷v产偷v自拍涩爱| 欧美色播在线播放| 91香蕉视频污在线观看| 成人中文字幕电影| 无码人妻丰满熟妇区毛片| 久久福利综合| 国产精品免费一区二区三区| 51一区二区三区| 欧美大片在线看免费观看| 色就是色亚洲色图| 91精品婷婷国产综合久久性色| 亚洲综合一二三| 中文一区二区完整视频在线观看 | 久久嫩草精品久久久精品一| 在线观看国产福利| 99精品国产一区二区青青牛奶| 亚洲国产日韩美| 久久porn| 91在线精品视频| 日韩免费福利视频| 欧美激情一区二区三区久久久 | 亚洲狼人综合网| 在线观看欧美日本| 久久婷婷一区二区| 国产精品麻豆视频| 精品国产人妻一区二区三区| 蜜芽一区二区三区| 欧洲av无码放荡人妇网站| 午夜天堂精品久久久久| 一本一本a久久| 日韩母乳在线| www.成人av.com| 亚洲成人a级片| 日韩美女视频中文字幕| 24小时免费看片在线观看| 久久亚洲精品网站| 成人免费黄色网页| 国产视频精品一区二区三区| 高潮一区二区三区乱码| 欧美高清www午色夜在线视频| 久久青青草原亚洲av无码麻豆 | 日韩在线 中文字幕| 亚洲一区在线播放| 日日噜噜夜夜狠狠久久波多野| 国产日韩综合av| 魔女鞋交玉足榨精调教| av爱爱亚洲一区| 国产亚洲精品成人a| 国产一区二区精品久久| 久久资源亚洲| 国产精品zjzjzj在线观看| 91美女片黄在线观| 欧美亚洲人成在线| 国产精品中文在线| 国产91在线播放精品| 热99在线视频| 在线视频超级| 欧美专区第一页| 校园春色亚洲| 欧美自拍视频在线观看| 丁香六月综合| 茄子视频成人在线| 欧美片第一页| 国产精品视频地址| 成人交换视频| 成人av在线天堂| 欧美极品在线| 成人精品一区二区三区电影免费| 日本电影久久久| 国产精品日韩一区| 美女久久久久久| 成人黄色生活片| 久久精品免视看国产成人| 91中文在线观看| 日韩欧美中文字幕一区二区三区| 91成人免费视频| 国产精品任我爽爆在线播放| 国内成+人亚洲| 免费观看久久av| 日韩在线三级| 亚洲高清影视| 国产精品999视频| 久久精品导航| 在线看免费毛片| 大白屁股一区二区视频| 国产亚洲色婷婷久久99精品91| 91视频免费播放| 亚洲色图 激情小说| 亚洲少妇30p| 精品无码av在线| 欧美午夜激情在线| 中文字幕+乱码+中文字幕明步| 欧美日韩第一区日日骚| 亚洲AV无码精品色毛片浪潮| 日韩精品在线视频| 日韩精品成人av| 欧美精品videossex88| 樱花草涩涩www在线播放| 国产免费一区视频观看免费| 涩涩屋成人免费视频软件| 九色一区二区| 日韩精品诱惑一区?区三区| av动漫在线免费观看| 久久精品道一区二区三区| √天堂资源在线| 2019国产精品| 东方av正在进入| 欧美日韩中文字幕日韩欧美| 中文字幕一区二区三区人妻四季 | 国产精品丝袜高跟| 伊人精品久久| 无遮挡亚洲一区| 亚洲网站啪啪| 视频二区在线播放| 成人a免费在线看| 欧美一级特黄高清视频| 欧美三级免费观看| 亚洲第一天堂网| 中文字幕综合在线| 182在线播放| 亚洲xxxxx性| 欧美日韩一二| 91国视频在线| 国产成人免费网站| 日韩影视一区二区三区| 精品国产精品自拍| 国产黄色美女视频| 中文字幕日韩精品在线| 丝袜诱惑一区二区| 高清国产在线一区| 午夜精品毛片| 欧美日韩大尺度| 99精品偷自拍| 欧美黄色免费看| 欧美精品 国产精品| 国内三级在线观看| 91成人国产在线观看| 亚洲视频国产精品| 国产在线拍揄自揄拍无码| 日韩 欧美一区二区三区| 免费看黄色aaaaaa 片| 亚洲国产日韩精品| 亚洲国产精品成人久久蜜臀| 久久夜色精品国产| 伊人亚洲精品| 亚洲一区二区在线观| 玖玖视频精品| 日本黄色特级片| 欧美日韩免费在线| 日韩在线观看视频网站| 久久久人成影片一区二区三区| 视频精品一区二区三区| 欧美 国产 精品| 国产成人av一区二区| 久久久久久久久久99| 欧美一级高清片| a视频在线免费看| 亚洲直播在线一区| 亚洲午夜精品一区 二区 三区| 日本高清久久久| 亚洲欧洲三级电影| 国产女人18毛片水18精| 美女少妇精品视频| 人人九九精品视频| www成人免费| 成人久久18免费网站麻豆 | 极品尤物一区二区三区| 一区二区黄色| 国产精品无码一区二区三| 欧美日韩一区二区三区| 欧美日韩国产综合视频| 日韩美女主播视频| 成人在线免费观看91| 午夜视频在线网站| 亚洲卡通动漫在线| 蜜桃视频污在线观看| 青青在线视频一区二区三区| 国产成人av| 狠狠操狠狠干视频| 亚洲激情五月婷婷| 婷婷在线免费视频| 日韩av电影中文字幕| 日韩.com| 香蕉视频xxxx| 好吊成人免视频| 高清av电影在线观看| 91香蕉亚洲精品| 亚洲福利国产| 日韩一区二区a片免费观看| 欧美高清一级片在线| 国产蜜臀一区二区打屁股调教| 久久99国产精品| 蜜臀av一区二区在线观看| 国产精品丝袜一区二区| 亚洲高清免费观看高清完整版| 成人免费短视频| 一区在线电影| 波多野结衣中文字幕一区| japanese国产在线观看| 欧美插天视频在线播放| 少妇久久久久| 国产三级生活片| 亚洲成av人影院| 91涩漫在线观看| 国产精品免费一区二区三区观看| 日韩高清电影一区| 精品无码久久久久久久| 在线成人激情视频| 国内精品偷拍| www.国产视频.com| 天天综合色天天| 麻豆网在线观看| 精品一区久久久| 国内精品不卡在线| 69av视频在线观看| 欧美激情一区二区久久久| 成人免费在线播放| 女人被狂躁c到高潮| 日韩欧美中文字幕一区| www.成人在线视频| 无码人妻丰满熟妇区96|