Gradle构建无法从Bitbucket Maven仓库非master分支获取旧版本依赖
自定义Bitbucket Maven仓库依赖拉取问题
操作流程
- 生成库的aar文件:
./gradlew :designsystem:assemble - 在项目build.gradle中配置本地发布逻辑:
afterEvaluate { publishing { publications.create<MavenPublication>("SADS") { groupId = "com.strollby.libraries" artifactId = "design-system" version = "1.0.2" pom.packaging = "aar" artifact(file("../designsystem/build/outputs/aar/designsystem-release.aar")) pom.withXml { val dependenciesNode = asNode().appendNode("dependencies") configurations.getByName("implementation") { dependencies.forEach { val dependencyNode = dependenciesNode.appendNode("dependency") dependencyNode.appendNode("groupId", it.group) dependencyNode.appendNode("artifactId", it.name) dependencyNode.appendNode("version", it.version) } } } } repositories { maven { name = "RemoteDispatch" url = uri("..") } } } } - 执行发布命令将工件推送到本地目录:
./gradlew publishSADSPublicationToRemoteDispatchRepository - 推送本地目录内容到Bitbucket master分支后,在消费项目中配置远程仓库:
maven { credentials { username = "nitheesh" password = "xxxxx" } authentication { create<BasicAuthentication>("basic") } url = uri("https://api.bitbucket.org/2.0/repositories/strollby/android-design-system/src/master") } - 声明依赖:
implementation("com.strollby.libraries:design-system:1.0.0")
遇到的问题
- 从master分支拉取任意版本依赖(如1.0.0)正常
- 切换到releases分支(仓库地址
https://api.bitbucket.org/2.0/repositories/strollby/android-design-system/src/releases)时,仅能拉取最新版本1.0.2,拉取旧版本1.0.0时报错:Failed to resolve: Strollby Design System:designsystem:unspecified - 确认两个分支内容完全一致,maven-metadata.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> <metadata> <groupId>com.strollby.libraries</groupId> <artifactId>design-system</artifactId> <versioning> <latest>1.0.2</latest> <release>1.0.2</release> <versions> <version>1.0.0</version> <version>1.0.1</version> <version>1.0.2</version> </versions> <lastUpdated>20240425063043</lastUpdated> - 尝试其他仓库时,甚至master分支也无法正常拉取依赖
错误排查与解决建议
Bitbucket路径使用错误
你当前使用的https://api.bitbucket.org/2.0/repositories/.../src/{branch}是Bitbucket的源码访问路径,并非Maven仓库的标准访问路径。Maven需要按groupId/artifactId/version的层级结构读取工件,而源码路径无法解析这种层级请求。正确做法是使用Bitbucket官方的Packages功能托管Maven仓库,而非将工件直接推送到源码分支。分支工件文件缺失
即使元数据文件同步,releases分支可能缺少旧版本对应的工件文件(比如1.0.0版本的aar、pom文件)。检查releases分支下是否存在com/strollby/libraries/design-system/1.0.0目录及完整的工件文件。Gradle缓存未刷新
切换分支后Gradle可能缓存了旧的元数据,导致无法识别新分支的旧版本。执行以下命令清理缓存后重试:./gradlew clean build --refresh-dependencies发布脚本版本硬编码
发布脚本中version硬编码为1.0.2,发布旧版本时需要修改version值后重新执行发布命令,确保每个版本的工件都被正确生成并推送到分支中。权限与认证问题
切换分支后,当前账号可能没有读取releases分支下旧版本工件的权限,或者认证配置未正确生效。检查Bitbucket仓库的分支权限设置,确保账号拥有完整的读取权限。
内容的提问来源于stack exchange,提问作者imn
相关产品推荐
相关产品推荐

