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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:43:10