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

SBT libraryDependencySchemes配置问题:ScalaJS依赖冲突未解决

解决ScalaJS跨平台项目中的geny依赖冲突问题

问题重现

遇到依赖冲突错误,仅ScalaJS端受影响,JVM端正常:

[error] (server / update) found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[error] 
[error]     * com.lihaoyi:geny_2.13:1.0.0 (early-semver) is selected over 0.6.10
[error]         +- com.lihaoyi:scalatags_2.13:0.12.0                  (depends on 1.0.0)
[error]         +- com.lihaoyi:fastparse_2.13:2.3.3                   (depends on 0.6.10)
[error] 
[error] 
[error] this can be overridden using libraryDependencySchemes or evictionErrorLevel

尝试使用libraryDependencySchemes配置VersionScheme.Always但未解决,试过以下两种无效写法:

libraryDependencySchemes += "com.lihaoyi" %% "geny" % VersionScheme.Always
libraryDependencySchemes += "com.lihaoyi" %%% "geny" % VersionScheme.Always

项目是跨平台多子项目结构,核心配置如下:

lazy val xplatform = crossProject(JSPlatform, JVMPlatform)
  .crossType(CrossType.Full)
  .in(file("_xplatform"))
  .settings(commonSettings)
  .settings(
    libraryDependencySchemes += "com.lihaoyi" %% "geny" % VersionScheme.Always, // 无效写法
    libraryDependencies ++= Seq(
      "com.lihaoyi"       %%% "fastparse"       % "2.3.3",
      "com.lihaoyi"       %%% "scalatags"       % "0.12.0",
      // 其他省略依赖
    ),
    jsEnv := new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv()
  )
  .jsSettings(
    libraryDependencies ++= Seq(
      "ca.bwbecker"  %%% "jsFacadeOptionBuilder" % "0.9.6"
    ),
    jsDependencies += "org.webjars" % "jquery" % "3.4.1" / "jquery.js" % "test"
  )
  .jsConfigure(_.enablePlugins(ScalaJSWeb, JSDependenciesPlugin))

问题原因

libraryDependencySchemes的语法和libraryDependencies不同:

  • %%/%%%是libraryDependencies特有的语法,用于自动追加Scala版本或ScalaJS平台后缀
  • libraryDependencySchemes需要使用原始模块ID(仅组织名+模块名,不带版本后缀或平台标识),因此不能用%%或%%%

解决方案

方法1:修正libraryDependencySchemes语法

将配置改为不带平台/Scala版本后缀的格式,可直接在crossProject的settings中配置:

lazy val xplatform = crossProject(JSPlatform, JVMPlatform)
  .crossType(CrossType.Full)
  .in(file("_xplatform"))
  .settings(commonSettings)
  .settings(
    // 正确写法:使用%而非%%/%%%
    libraryDependencySchemes += "com.lihaoyi" % "geny" % VersionScheme.Always,
    libraryDependencies ++= Seq(
      "com.lihaoyi"       %%% "fastparse"       % "2.3.3",
      "com.lihaoyi"       %%% "scalatags"       % "0.12.0",
      // 其他省略依赖
    ),
    jsEnv := new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv()
  )
  // 其他配置...

方法2:针对ScalaJS子项目单独配置

如果全局配置仍不生效,可在jsSettings中单独添加该规则:

.jsSettings(
  libraryDependencySchemes += "com.lihaoyi" % "geny" % VersionScheme.Always,
  libraryDependencies ++= Seq(
    "ca.bwbecker"  %%% "jsFacadeOptionBuilder" % "0.9.6"
  ),
  jsDependencies += "org.webjars" % "jquery" % "3.4.1" / "jquery.js" % "test"
)

方法3:临时降级冲突级别(不推荐长期使用)

若上述方法仍无效,可将依赖冲突的错误级别改为警告,暂时跳过检查:

.settings(
  evictionErrorLevel := Level.Warn,
  // 其他配置...
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:55:23