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

sbt-crossproject发布JVM项目名称不符问题求助

Scala跨平台模块发布命名异常问题解决

环境信息

使用的sbt插件版本:

addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.9.2")
addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2")

问题描述

  • zio子模块发布后名称变为ziojvm_3,而非预期的scalamock-zio;cats-effect模块同理变为cats-effectjvm_3
  • 主模块scalamock在相同配置下能正常发布为scalamock(不带jvm后缀),子模块却出现命名异常

期望结果

JVM平台的zio、cats-effect模块发布名称为scalamock-zio、scalamock-cats-effect,JS平台保持带sjs1后缀的命名(如scalamock-zio_sjs1_3)

问题原因

scalamock主模块的项目ID(scalamock)和设置的name值完全一致,sbt-scalajs-crossproject会自动为这类跨项目的JVM平台省略后缀。而zio、cats-effect模块的项目ID(zio、cats-effect)与设置的name(scalamock-zio、scalamock-cats-effect)不一致,触发了默认的平台后缀添加逻辑,导致JVM端名称被修改为ziojvm、cats-effectjvm。

解决方法

给zio和cats-effect的crossProject添加withoutSuffixFor(JVMPlatform)配置,强制JVM平台不添加后缀:

修改zio模块配置

lazy val zio = crossProject(JSPlatform, JVMPlatform)
  .withoutSuffixFor(JVMPlatform) // 新增该行
  .in(file("zio"))
  .settings(
    name := "scalamock-zio",
    // 其余原有配置保持不变
  )
  .dependsOn(scalamock)

修改cats-effect模块配置

lazy val `cats-effect` = crossProject(JSPlatform, JVMPlatform)
  .withoutSuffixFor(JVMPlatform) // 新增该行
  .in(file("cats-effect"))
  .settings(
    name := "scalamock-cats-effect",
    // 其余原有配置保持不变
  )
  .dependsOn(scalamock)

补充说明

  • 该配置仅对JVM平台生效,JS平台仍会保留sjs1后缀,符合跨平台库的发布规范
  • 主模块因项目ID与name一致,无需额外配置即可自动省略JVM后缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:52:42