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

sbt-crossproject默认项目scalaVersion与自定义值不符原因咨询

问题原因及解决方案

核心原因

你遇到的问题是因为sbt默认的根项目没有应用你定义的sharedSettings:

  • 用crossProject在根目录(file("."))创建的是oatlibxpJVM、oatlibxpJS这两个子项目,这两个项目确实会继承sharedSettings里的配置;
  • 但sbt会自动生成一个未显式定义的根项目(也就是你执行show scalaVersion时默认查询的项目),这个根项目没有关联crossProject的配置,所以用的是sbt内置的默认Scala版本(2.12.18是sbt 1.x系列的默认Scala版本),version、scalacOptions等配置也同理,用的是默认值而非你定义的内容。

你可以验证这一点:执行show oatlibxpJVM/scalaVersion和show oatlibxpJS/scalaVersion,会看到输出是你指定的2.13.11,而show scalaVersion查的是未配置的根项目。

解决方法

显式定义根项目,聚合JVM和JS子项目并应用sharedSettings,修改build.sbt如下:

val sharedSettings = Seq(
  version      := "3.0.0-SNAPSHOT",
  name         := "oatLibXP",
  scalaVersion := "2.13.11",
  scalacOptions ++= Seq("-feature", "-deprecation", "-unchecked"),
)

lazy val oatlibxp = crossProject(JSPlatform, JVMPlatform)
  .crossType(CrossType.Full)
  .in(file("."))
  .settings(sharedSettings)

// 显式创建根项目,聚合跨编译子项目并应用公共配置
lazy val root = (project in file("."))
  .aggregate(oatlibxp.jvm, oatlibxp.js)
  .settings(sharedSettings)

这样修改后,执行show scalaVersion就会显示你指定的2.13.11,其他配置也会同步生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:20:10