在gradle项目中引入Swagger2产生的依赖冲突问题

  • Post author:
  • Post category:其他


本人是一个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版本,结果项目成功运行,原来到头来还是版本问题,真是让人哭笑不得。



版权声明:本文为TheCalm原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。