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

