如何使用Scala SBT将库发布至两个Maven仓库?
使用SBT同时发布到两个Maven仓库的最优方案
无需依赖第三方插件,当前SBT原生支持通过自定义任务实现多仓库发布,具体步骤如下:
1. 配置仓库地址
在build.sbt中定义两个目标Maven仓库的解析器:
val oldMavenRepo = "Old Maven Release Repo" at "https://old-repo.example.com/release" val newMavenRepo = "New Maven Release Repo" at "https://new-repo.example.com/release" // 若发布快照版本,替换为对应快照仓库地址 // val oldMavenSnapshotRepo = "Old Maven Snapshot Repo" at "https://old-repo.example.com/snapshots" // val newMavenSnapshotRepo = "New Maven Snapshot Repo" at "https://new-repo.example.com/snapshots"
2. 配置仓库认证(按需)
如果仓库需要用户名密码验证,在用户目录下创建~/.sbt/1.0/credentials文件,添加两个仓库的认证信息:
realm=Old Maven Release Repo host=old-repo.example.com user=your-username password=your-password realm=New Maven Release Repo host=new-repo.example.com user=your-username password=your-password
随后在build.sbt中引入该认证文件:
credentials += Credentials(Path.userHome / ".sbt" / "1.0" / "credentials")
3. 定义发布任务
在build.sbt中配置针对不同仓库的发布目标,并组合成批量发布任务:
// 显式开启Maven格式发布(默认已启用,可省略) publishMavenStyle := true // 为旧仓库绑定发布目标 publishTo in (ThisBuild, "publishOld") := Some(oldMavenRepo) // 为新仓库绑定发布目标 publishTo in (ThisBuild, "publishNew") := Some(newMavenRepo) // 组合任务:一次性发布到两个仓库 lazy val publishAll = taskKey[Unit]("Publish artifact to both old and new Maven repositories") publishAll := { (publish in "publishOld").value (publish in "publishNew").value }
4. 执行发布
在终端运行以下命令完成双仓库发布:
sbt publishAll
若需单独发布到某一个仓库,可分别执行:
sbt publishOld # 或 sbt publishNew
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

