背景
今天在启动一个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重新下载,最后问题顺利解决