You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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分支也无法正常拉取依赖

错误排查与解决建议

  1. Bitbucket路径使用错误
    你当前使用的https://api.bitbucket.org/2.0/repositories/.../src/{branch}是Bitbucket的源码访问路径,并非Maven仓库的标准访问路径。Maven需要按groupId/artifactId/version的层级结构读取工件,而源码路径无法解析这种层级请求。正确做法是使用Bitbucket官方的Packages功能托管Maven仓库,而非将工件直接推送到源码分支。

  2. 分支工件文件缺失
    即使元数据文件同步,releases分支可能缺少旧版本对应的工件文件(比如1.0.0版本的aar、pom文件)。检查releases分支下是否存在com/strollby/libraries/design-system/1.0.0目录及完整的工件文件。

  3. Gradle缓存未刷新
    切换分支后Gradle可能缓存了旧的元数据,导致无法识别新分支的旧版本。执行以下命令清理缓存后重试:

    ./gradlew clean build --refresh-dependencies
    
  4. 发布脚本版本硬编码
    发布脚本中version硬编码为1.0.2,发布旧版本时需要修改version值后重新执行发布命令,确保每个版本的工件都被正确生成并推送到分支中。

  5. 权限与认证问题
    切换分支后,当前账号可能没有读取releases分支下旧版本工件的权限,或者认证配置未正确生效。检查Bitbucket仓库的分支权限设置,确保账号拥有完整的读取权限。

内容的提问来源于stack exchange,提问作者imn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:40:57