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
相关产品推荐
相关产品推荐

