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

如何用Sbt批量发布依赖不同实现的Api包?

动态批量发布依赖不同Impl的Api包方案

核心思路

通过Sbt的动态子项目生成和自定义任务,实现批量创建依赖不同Impl的Api子项目,并一键完成本地发布。

具体配置步骤

假设你的项目目录结构如下:

root/
├── base/
├── impl/
│   ├── impl1/
│   ├── impl2/
│   └── ...
└── api/
  1. 在根项目build.sbt中定义Impl模块列表
    统一维护所有需要关联的Impl模块名称,新增Impl时只需更新这个列表:

    // 定义存储Impl模块名称的设置项
    val implModules = settingKey[Seq[String]]("所有需要关联的Impl模块名称")
    // 配置当前存在的Impl模块,新增时直接添加即可
    implModules := Seq("impl1", "impl2")
    
  2. 动态生成依赖对应Impl的Api子项目
    基于Impl列表自动创建每个Api派生项目,配置依赖和发布名称:

    // 遍历Impl模块列表,生成对应的Api子项目
    lazy val apiProjects = implModules.value.map { implName =>
      lazy val apiImplProject = Project(id = s"api-$implName", base = file(s"api"))
        .settings(
          // 依赖对应的Impl模块
          libraryDependencies += rootProject.value.project(s"impl-$implName"),
          // 自定义发布的Artifact名称,格式为api-implX
          artifactName := { (sv, module, artifact) =>
            s"api-$implName_${sv.scalaVersion}-${sv.version}.${artifact.extension}"
          },
          // 继承根项目基础配置(版本、Scala版本等)
          version := version.value,
          scalaVersion := scalaVersion.value
        )
      apiImplProject
    }
    
    // 将所有动态生成的Api子项目添加到根项目聚合中
    lazy val root = (project in file("."))
      .aggregate(apiProjects: _*)
      .settings(
        name := "my-root-project",
        version := "1.0.0",
        scalaVersion := "2.13.12"
      )
    
  3. 创建一键批量发布任务
    定义自定义任务,触发所有动态Api项目的本地发布:

    // 批量发布所有Api-Impl项目到本地仓库
    lazy val publishAllApiImpls = taskKey[Unit]("批量发布所有依赖不同Impl的Api包到本地")
    publishAllApiImpls := {
      apiProjects.value.foreach { proj =>
        (proj / publishLocal).value
      }
    }
    

使用方式

  • 新增Impl模块:在implModules的Seq中添加新的Impl名称(比如"impl3"),确保impl/impl3目录存在并配置好对base模块的依赖。
  • 批量发布:终端执行sbt publishAllApiImpls,自动将所有api-impl1、api-impl2等包发布到本地仓库。
  • 单独发布某一个:执行sbt api-impl1/publishLocal即可单独发布指定Api包。

注意事项

  • 确保每个Impl子项目已正确配置对base模块的依赖。
  • 如果Api模块有专属基础配置,可抽成lazy val apiBaseSettings = Seq(...),让动态生成的Api项目继承该设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:52:45