OSS Maven 从 Bintray 迁移疑问:JFrog Platform OSS 选项暂不可用,我遗漏了哪些信息?
嘿,我来帮你捋捋这个迁移过程中容易被忽略的关键细节——毕竟我之前帮不少Android开源项目搞定过这类迁移,踩过不少坑:
替代仓库的选型误区:别死盯着JFrog Platform的OSS选项,目前Android生态最主流、官方推荐的是Maven Central(Sonatype),另外GitHub Packages、GitLab Packages也是不错的备选。很多人容易忽略Maven Central的准入要求:必须用GPG签名所有发布的包,还要完成Sonatype的项目申请(需要域名验证或者GitHub组织验证),这些流程比JCenter繁琐得多,提前准备能少走弯路。
下游依赖的用户告知:你的开源包肯定有不少开发者在依赖,他们的项目里大概率还留着
jcenter()仓库配置。虽然JCenter现在是只读状态,但未来会彻底下线,你必须主动在项目README、Release Notes里明确告知用户:- 如何替换仓库(比如把
jcenter()换成mavenCentral()或者你的新仓库地址) - 依赖坐标是否有变化(比如groupId/artifactId有没有调整)
- 如果有旧版本依赖,要确保迁移后的包版本号完全一致,避免用户出现依赖冲突
- 如何替换仓库(比如把
CI/CD全链路的更新:很多人只改了发布脚本,却忘了同步更新CI流水线的所有环节:
- 替换项目构建时的依赖仓库(把
jcenter()从build.gradle/settings.gradle里删掉) - 移除Bintray相关的Gradle插件(比如
com.jfrog.bintray),换成新仓库对应的插件(比如Maven Central用的io.github.gradle-nexus.publish-plugin) - 更新环境变量:把之前的Bintray API密钥换成新仓库的认证信息(比如Sonatype的用户名密码、GPG私钥及密码)
- 替换项目构建时的依赖仓库(把
包元数据的完整性要求:JCenter对元数据的要求很宽松,但Maven Central这类正规仓库要求完整的POM文件,包括:
- 开发者姓名、邮箱等信息
- 标准的开源许可证SPDX标识符(比如
MIT、Apache-2.0,不能随便写“开源许可证”) - SCM地址(GitHub仓库链接)、项目描述、主页链接等
要是元数据不全,你的包要么过不了审核,要么无法被Gradle正常索引到。
历史版本的完整迁移与备份:别只迁移最新版本,要把所有历史版本(哪怕是几年前的旧版本)都同步到新仓库——总有开发者会依赖旧版本。另外,自己本地或用云存储备份一份所有包的归档,避免JCenter彻底下线后丢失历史版本。
Android Studio的适配提示:现在Android Studio会弹出
jcenter()已废弃的警告,你可以在项目文档里加上具体的适配步骤,比如在settings.gradle的dependencyResolutionManagement块中替换仓库配置:dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() // 替换掉jcenter() // 如果用自定义仓库,添加对应的地址 // maven { url "https://your-new-repo-url" } } }
内容的提问来源于stack exchange,提问作者noamtm

