在gradle項目中引入Swagger2產生的依賴沖突問題


  本人是一個gradle小白,在對一個gradle項目進行升級時,由於不熟悉吃了好多虧,改bug都要改吐了。好不容易把項目升級成功,但是卻由於想要引入Swagger而又和項目中的guava起了依賴沖突,這就是填了一個坑又挖了一個坑,說多了都是淚啊。
  首先啟動項目時提示如下:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

    springfox.documentation.schema.DefaultModelDependencyProvider.dependentModels(DefaultModelDependencyProvider.java:79)

The following method did not exist:

    'com.google.common.collect.FluentIterable com.google.common.collect.FluentIterable.concat(java.lang.Iterable, java.lang.Iterable)'

The method's class, com.google.common.collect.FluentIterable, is available from the following locations:

    jar:file:/C:/Users/acer/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/18.0/cce0823396aa693798f8882e64213b1772032b09/guava-18.0.jar!/com/google/common/collect/FluentIterable.class

It was loaded from the following location:

    file:/C:/Users/acer/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/18.0/cce0823396aa693798f8882e64213b1772032b09/guava-18.0.jar


Action:

Correct the classpath of your application so that it contains a single, compatible version of com.google.common.collect.FluentIterable

  我的理解應該是有什么依賴跟guava這個依賴起沖突了,我想起來這個問題是在我把Swagger這個依賴引入時才產生的,於是查看gradle項目的依賴樹跟guava相關的依賴。

  生成的依賴樹長這個樣子(只截取了一小部分):

  果然,guava跟Swagger相關依賴產生了沖突!但是目前我只知道是產生了沖突卻不知道具體是哪一部分產生了沖突,於是在網上找了一些資料,不過大多數情況下,都是在Maven項目下進行解決的,如果本身是Maven項目,那么可以參考這篇文章進行解決:給Swagger升級了新版本,沒想到居然有這么多坑!
  接着還是回到正題,具體講講我是怎么解決這個依賴沖突的問題。

  下載了一個叫gradle view的idea插件查看依賴,但是好像沒什么用,除了幫我生成目錄狀依賴樹以外沒什么用。不過這一次我簡單的以為問題出在Swagger2的依賴上,於是我將Swagger2的依賴中移除了guava的依賴引用。

    implementation('io.springfox:springfox-swagger2:2.9.2'){
        exclude group: 'com.google.guava', module: 'guava'
    }

  但是情況並沒有好轉,不過guava與Swagger的依賴倒確實是沒有了。於是又開始找資料,皇天不負有心人,終於,在這篇博客(好機會,女同事要我幫忙解決Maven沖突問題)中,我終於找到了答案。
  這一次我又開始查看依賴樹,不過這一次是查看runtime依賴目錄,依賴情況如下:

  這張圖告訴我,guava現在已經沒有跟別的依賴產生聯系了,那么依賴沖突的問題到底是怎么回事呢?這一次我盯着運行時報出的異常仔細看,終於發現了問題。

The following method did not exist:

    'com.google.common.collect.FluentIterable com.google.common.collect.FluentIterable.concat(java.lang.Iterable, java.lang.Iterable)'

  原來是guava:18.0這個jar包根本就確實不存在com.google.common.collect.FluentIterable.concat(java.lang.Iterable, java.lang.Iterable)這個方法!於是我把guava更新至20.0版本,結果項目成功運行,原來到頭來還是版本問題,真是讓人哭笑不得。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM