精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

色吧亚洲视频| 亚洲成人免费网站| 亚洲一区二区三区精品视频| 中文字幕无线码一区 | 国产在线播放一区二区| 国产尤物在线视频| 中文字幕一区二区三区中文字幕 | 日韩精品高清视频| cao在线观看| 国产色片在线观看| 99欧美视频| 欧美日韩中文字幕精品| 久久福利一区二区| 午夜精品久久久久久久99| 亚洲美女黄色| 精品国产1区二区| 丰满少妇在线观看| 高h视频在线| 国产高清精品久久久久| 日韩av免费在线播放| 国产免费无码一区二区视频| 同性恋视频一区| 欧美一区二区三区免费观看视频 | 亚洲成色777777在线观看影院| 日本999视频| 成人在线播放视频| 成人av午夜电影| 91久久在线播放| 久久高清内射无套| 激情视频亚洲| 欧美性色黄大片| 成人黄色av片| 日本孕妇大胆孕交无码| 成人精品免费视频| 7777kkkk成人观看| 欧美毛片在线观看| 牛牛影视一区二区三区免费看| 欧美军同video69gay| www国产精品内射老熟女| 成人影欧美片| 自拍偷拍欧美激情| 国产精品jizz视频| 久久国产精品系列| 国产一区日韩| 亚洲精品资源美女情侣酒店| 第一页在线视频| 九九九九九九精品任你躁| 亚洲成人精品在线观看| 特级西西444| 免费理论片在线观看播放老| 久久精品国产亚洲a| 国产精品成人一区| 成人h动漫精品一区二区下载| 国产精品日韩久久久| 尤物九九久久国产精品的分类| aa一级黄色片| 蜜臀av免费一区二区三区| 精品亚洲一区二区三区在线观看| 久久国产这里只有精品| 激情久久99| 欧美日韩国产一区二区三区地区| 日韩欧美猛交xxxxx无码| 熟妇人妻中文av无码| 日韩av电影天堂| 国产精品都在这里| 久久综合综合久久| 欧美精选一区二区三区| 精品精品国产高清a毛片牛牛| www.亚洲天堂网| 88xx成人免费观看视频库| 亚洲人吸女人奶水| 日日噜噜夜夜狠狠久久丁香五月| 亚洲色欧美另类| 99久久综合狠狠综合久久| 黑人中文字幕一区二区三区| 一区二区精品视频在线观看| 久久99精品国产| 成人在线视频电影| 91成年人视频| 久久中文欧美| 久久久综合免费视频| 天天插天天操天天干| 欧美激情第8页| 91精品国产精品| 婷婷激情五月综合| 国产日韩欧美高清免费| 国产精品ⅴa在线观看h| 国产剧情精品在线| www.欧美色图| 婷婷久久青草热一区二区| 亚欧在线观看视频| 中文字幕不卡在线播放| 三级在线免费观看| 正在播放日韩精品| 欧美喷潮久久久xxxxx| 性一交一黄一片| 少妇一区二区视频| 久久这里只有精品99| 可以免费看av的网址| 欧美日韩国产免费观看 | 国产成人无码精品| 麻豆精品一区二区| 国产精品久久久久久久久久三级| 婷婷激情五月网| 久久国产综合精品| 91精品啪在线观看麻豆免费| 亚洲精品91天天久久人人| 久久av在线| 亚洲综合一区二区不卡| 国产成人麻豆精品午夜在线| 91小视频免费观看| 裸体裸乳免费看| 欧美大片免费高清观看| 日韩欧美在线不卡| 日本女人性视频| 涩爱av色老久久精品偷偷鲁| 亚洲欧美日韩精品久久亚洲区| 欧美激情图片小说| 午夜久久久久| 国产精品久久二区| 在线免费看av的网站| 成+人+亚洲+综合天堂| 亚洲在线观看一区| 在线观看三级视频| 欧美系列日韩一区| 一二三级黄色片| 日本精品在线观看| 中文字幕亚洲欧美一区二区三区 | 永久免费观看片现看| 国产日韩专区| 欧美专区第一页| 亚洲伦理在线观看| 亚洲少妇30p| 亚洲第一中文av| 国产成人一区二区三区影院| 在线电影中文日韩| 亚洲自拍一区在线观看| 日本v片在线高清不卡在线观看| 国产日韩在线一区二区三区| 在线观看中文字幕的网站| 337p亚洲精品色噜噜噜| 999精品久久久| 青青草91视频| 亚洲精品乱码久久久久久蜜桃91 | 99精品国产福利在线观看免费| 亚洲一区二区三区在线视频| 免费**毛片在线| 亚洲丰满少妇videoshd| 无人码人妻一区二区三区免费| 国内精品麻豆美女在线播放视频| 免费91麻豆精品国产自产在线观看 | 91精品国产自产拍在线观看蜜| 国产精品av电影| 性猛交富婆╳xxx乱大交天津| 99久久99久久久精品齐齐| 日韩精品第一页| 九色91在线| 亚洲电影在线看| 日韩欧美亚洲一区二区三区| 99视频热这里只有精品免费| 成人毛片一区二区| 亚洲专区视频| 国产精品久久久久久久久男| 欧洲日本在线| 日韩欧美亚洲一二三区| xxx在线播放| 亚洲激情一区| 亚洲一区二区久久久久久久| 免费资源在线观看| 在线精品观看国产| 日韩在线不卡av| 久久国产毛片| 日韩高清国产精品| 国产成人免费精品| 欧美成人午夜激情视频| 久久国产香蕉视频| 亚洲视频图片小说| 亚洲这里只有精品| 中文字幕人成人乱码| 国产精品入口免费视| 手机福利在线| 亚洲国产成人av好男人在线观看| 亚洲制服中文字幕| 伊人成人在线视频| 日韩av电影免费播放| 一区二区三区| 91精品国产自产91精品| 高清av在线| 欧美tickling网站挠脚心| 激情五月色婷婷| 成人视屏免费看| 18岁视频在线观看| 亚洲激情播播| 91精品久久久久久综合乱菊| h片在线观看下载| 中文字幕一区日韩电影| 无码人妻精品一区二区三区9厂 | 日韩av最新在线观看| 国产精品露脸视频| 国产欧美一区二区三区鸳鸯浴| 午夜精品免费看| 国产午夜久久| 久久青青草原一区二区| 欧美高清免费| 久久香蕉频线观| 国产免费高清视频| 黑人巨大精品欧美一区免费视频 | 国产福利在线播放麻豆| 亚洲精品久久久久中文字幕二区 | 99riav久久精品riav| 色天使在线观看| 日韩精品2区| 精品一区二区日本| 免费欧美网站| 国产精品视频在线观看| 在线观看免费黄视频| 亚洲精品国产免费| 亚洲免费一级片| 91精品国产综合久久久久久漫画 | 久久国产露脸精品国产| 亚洲国产激情av| 国产高清视频网站| 国产美女精品| 成人在线国产视频| 亚洲欧洲美洲国产香蕉| 99久久99久久精品国产片| 成人国产精品入口免费视频| 欧美性受xxx| 超碰在线最新网址| 日韩精品视频中文在线观看| 精品久久久久中文慕人妻| 欧美色图第一页| 波多野结衣黄色| 欧美午夜精品久久久久久浪潮 | 在线日韩一区二区| 久久日免费视频| 国产一区二区福利| av在线网址导航| 日韩av一区二区在线影视| 成人观看免费完整观看| 午夜在线播放视频欧美| 日本国产在线播放| 亚洲激情另类| 亚洲免费不卡| 成人免费av| 翔田千里亚洲一二三区| 99久久婷婷国产综合精品青牛牛| 91成品人片a无限观看| 337p日本欧洲亚洲大胆鲁鲁| 亚洲欧洲在线视频| 国产中文字幕在线观看| 亚洲人成网站在线播| 国产毛片毛片毛片毛片毛片| 天天色天天爱天天射综合| 情侣偷拍对白清晰饥渴难耐| 国产精品久久久一区麻豆最新章节| 男人的天堂官网| 国产精品久久久久影院色老大 | 国产麻豆剧传媒精品国产| 亚洲欧美日韩精品一区二区| 丝袜老师办公室里做好紧好爽 | 亲爱的老师9免费观看全集电视剧| 一级毛片视频在线| 色偷偷噜噜噜亚洲男人的天堂| 色多多视频在线观看| 久久这里有精品视频| 不卡一本毛片| www.久久久久| 午夜伦理大片视频在线观看| 国产亚洲人成a一在线v站| 伊人免费在线| 国产小视频91| 五月天久久久久久| 69堂精品视频| 国产 欧美 精品| 亚洲男人天堂手机在线| a天堂中文在线| 亚洲欧美国产一区二区三区| 男人天堂网在线视频| 日韩黄色av网站| 日本中文字幕在线视频| 欧美多人爱爱视频网站| 中文字幕这里只有精品| 成人亚洲欧美一区二区三区| 精品成人av| 91aaaa| 免费看日产一区二区三区| 成人精品久久av网站| 成人在线观看免费视频| 国产精品福利久久久| 日韩精品三区| 91嫩草国产在线观看| 久久爱www.| 茄子视频成人在线观看| 一区二区三区四区在线观看国产日韩| 一区二区精品免费视频| 午夜视频精品| 久久久国内精品| 欧美视频一区| 国内自拍视频网| 奇米一区二区三区| 美女少妇一区二区| 久久电影网电视剧免费观看| www.17c.com喷水少妇| 国产精品国产精品国产专区不片| 欧美成人久久久免费播放| 国产精品激情偷乱一区二区∴| 国产精品成人国产乱| 欧美精品第1页| 黄色片在线播放| 日韩一级黄色av| 午夜av在线播放| 国产精品色婷婷视频| 欧美三级午夜理伦三级在线观看 | 男女精品视频| 激情视频综合网| 成人免费视频caoporn| 少妇精品无码一区二区三区| 91久色porny| 久久久久97国产| 欧美日韩中文字幕综合视频| 国产精品一级视频| 永久免费看mv网站入口亚洲| 啊啊啊久久久| 99在线视频免费观看| 国产精品成人av| 免费一级特黄录像| 久久久国产精品午夜一区ai换脸| 一级在线观看视频| 欧美性色19p| 亚洲日本国产精品| 日韩最新在线视频| 日本一区免费网站| 色999五月色| 亚洲经典三级| 性色av蜜臀av浪潮av老女人| 亚洲一区视频在线观看视频| 国产精品久久久久久久一区二区| 一区二区三区亚洲| 欧美日韩亚洲国产| 天天综合色天天综合色hd| 久久久国产亚洲精品| 国产特级黄色录像| 亚洲精品中文字幕乱码三区| 欧美精品二区三区| 日韩精品欧美国产精品忘忧草| 黄色在线免费观看网站| 精品视频第一区| 国产日韩亚洲| 欧美日韩理论片| 亚洲美女在线一区| 日韩熟女一区二区| 日韩欧美国产麻豆| 国产高清视频免费最新在线| 日韩av手机在线| 97se亚洲| 椎名由奈jux491在线播放| 亚洲欧美视频一区二区三区| 久久人人爽人人爽人人片| 黑人精品xxx一区一二区| www.av日韩| 在线视频亚洲欧美| 日韩电影精品| 日产中文字幕在线精品一区| 日韩电影免费在线| 992在线观看| 亚洲欧美成人一区二区三区| 99视频国产精品免费观看a| 色综合久久中文字幕综合网小说| 在线高清av| 色一情一乱一伦一区二区三区丨| 伊人狠狠色j香婷婷综合| 超碰超碰在线观看| 亚洲精品日韩一| 韩国av永久免费| 日韩av片永久免费网站| 99久久综合| 国产又黄又粗又猛又爽的视频| 日韩欧美高清在线视频| 草逼视频免费看| 欧美一区二区三区免费观看| 日韩av自拍| 欧美丰满熟妇bbb久久久| 国产精品久久久99| 尤物视频在线观看国产| 色婷婷av一区| 神马午夜电影一区二区三区在线观看| 久久精品人人爽| 国产精品99久久免费观看| 国产第一页视频| 成人a免费在线看| 青娱乐免费在线视频| 亚洲美女视频网站| 久草在线资源站手机版| 色播亚洲婷婷| 久久久久久久波多野高潮日日| 波多野结衣视频播放| 欧美亚洲国产怡红院影院| 久久电影中文字幕| 国产成人在线播放|