Gradle找不到依赖问题排查

1,152 阅读2分钟

背景

今天在启动一个Gradle项目时遇到问题,有个引入的类不存在,导致项目无法启动。

找到类所在依赖包,确实没有这个类,看来这就是问题所在了

理解原理

在解决问题之前,要先知道gradle项目依赖库查找路径。

首先, 查找本地的 Gradle 缓存依赖库, 如果找到则直接使用该依赖库, 进行 Gradle 构建; 本地依赖库的缓存路径为 ".gradle\caches\modules-2\files-2.1"。Gradle 构建过程中, 如果发现本地没有缓存依赖库 , 则自动将依赖库缓存到该目录中。

gradle默认会把包缓存到用户目录的.gradle目录下,如果你打开.gradle\caches\modules-2\files-2.1,你会发现很多的jar包。mac上的话 ,也就是在/Users/自己的用户名/.gradle/caches/modules-2/files-2.1这个目录下

如果在本地 Gradle 依赖库缓存中仍然没有找到该依赖库该怎么办呢?可以看下build.gradle文件里的这段配置:

allprojects {  
    repositories {  
        mavenLocal()  
        maven {  
            url "https://nexus/xxxx"  
            credentials {  
                username = xxx  
                password = xxx
        }  
    }  
        mavenCentral()  
    }  
}

从这段配置可以知道,如果本地 Gradle 依赖库缓存中没有找到该依赖库的话,会去本地的maven仓库寻找依赖【mavenLocal()】,如果本地maven仓库仍然寻不到的话回去远程nexus仓库寻找下载,如果仍然找不到的话再去mavenCentral()远程maven仓库下载。

解决问题

  • 先把本地gradle的缓存删除下

    ./gradlew  build --refresh-dependencies -x test
    

    但这命令执行后没效果,执行报错,因为要先build,类都不存在肯定build不起来

  • 进到所在本地gradle依赖库缓存

    cd ~/.gradle/caches/modules-2/files-2.1
    
  • 发现找不到引入类所在依赖包,这说明所引用的依赖包不是本地gradle依赖库缓存的,那按照上面说的顺序再去看本地maven仓库

    cd /Users/sherlockchen/.m2/repository
    

找到了这个依赖包,只是这个依赖包不存在这个类,这说明项目引用了这个有问题的的依赖包。 把这个依赖包删除,刷新gradle重新下载,最后问题顺利解决

参考引用