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

