Travis CI中PR构建失败但推送成功,依赖包解析失败求助
嘿,看起来你遇到了典型的依赖解析环境不一致问题——本地推送没问题,但Travis的PR构建失败,核心报错是找不到com.squareup.leakcanary:leakcanary-android:1.5.4。结合你描述的分支合并、回滚背景,我给你梳理几个排查和修复方向:
1. 确认项目Gradle的仓库配置是否完整
LeakCanary 1.5.4是早期版本,最初托管在JCenter仓库(目前JCenter处于只读状态,但仍可访问旧版本)。你需要检查项目的root build.gradle或app模块的build.gradle,确保仓库配置包含对应源:
// 确保repositories块包含以下仓库 repositories { google() jcenter() // 关键:1.5.4版本仅在JCenter上存在,mavenCentral无此旧版本 mavenCentral() }
如果之前合并代码时不小心删掉了jcenter(),Travis的全新构建环境就会找不到依赖——而本地因为已有缓存,所以不受影响。
2. 适配Travis容器化环境的配置
你用了sudo: false,说明Travis使用轻量容器环境,默认Gradle配置可能和本地有差异。可以在travis.yml里添加前置命令,强制指定仓库配置:
sudo: false before_install: # 确保Gradle使用指定仓库,避免环境默认配置缺失 - echo "repositories { google(); jcenter(); mavenCentral() }" >> rootProject/build.gradle # 禁用Gradle守护,减少容器环境的异常 - echo "org.gradle.jvmargs=-Dorg.gradle.daemon=false" >> gradle.properties
另外,还可以查看Travis构建日志里的Gradle仓库列表,确认是否包含能找到1.5.4的仓库源。
3. 验证依赖可访问性与本地缓存差异
本地推送成功是因为Gradle已缓存leakcanary-android:1.5.4,但Travis每次构建都是全新环境,无缓存。你可以在本地模拟Travis的无缓存构建,排查项目本身的问题:
./gradlew clean build --no-build-cache
如果本地也报错,说明项目Gradle配置确实有问题;如果本地正常,大概率是Travis环境的网络或镜像问题,可以尝试在Gradle配置里添加仓库的HTTPS地址,避免HTTP重定向异常:
repositories { google() jcenter { url "https://jcenter.bintray.com/" } mavenCentral { url "https://repo1.maven.org/maven2/" } }
4. 排查分支合并后的配置变更
回顾修复分支的过程:回滚master后合并到分支修复,有没有可能修复时只解决了本地问题,没把仓库配置的修改同步到分支?导致再次PR到master时,master分支的Gradle配置依然缺失必要仓库,触发Travis构建失败。
内容的提问来源于stack exchange,提问作者pam

