本地发布的SBT插件无法匹配Scala版本,如何指定Scala_2.13版本?
解决sbt插件引用时Scala版本不匹配的问题
问题原因
sbt插件运行在sbt自身的JVM进程中,其Scala版本必须与sbt运行时依赖的Scala版本保持一致。sbt 1.6.x系列默认基于Scala 2.12构建,因此当你在项目中引用插件时,sbt会自动查找对应sbt版本+Scala 2.12的插件包。而你本地发布的插件是基于Scala 2.13编译的,自然会出现版本查找失败的错误。
解决方案
方案一:调整插件项目的Scala版本(推荐,无兼容性风险)
修改插件项目的scalaVersion为sbt 1.6.2对应的Scala版本(2.12.15),重新发布到本地仓库即可匹配项目的查找需求:
lazy val root = (project in file(".")). settings( name := "openelectrons-scalafmt-common-sbt-plugin", version := "0.0.1", organization := "com.openelectrons", scalaVersion := "2.12.15", // 改为sbt 1.6.2适配的Scala版本 sbtPlugin := true, sbtVersion := "1.6.2" )
方案二:强制项目引用指定Scala版本的插件(不推荐,存在兼容性风险)
如果必须使用Scala 2.13编译的插件,可以在项目的plugins.sbt中明确指定插件的Scala版本:
// 方式1:手动指定插件的Scala版本后缀 addSbtPlugin("com.openelectrons" % "openelectrons-scalafmt-common-sbt-plugin_2.13" % "0.0.1") // 方式2:使用full交叉版本匹配 addSbtPlugin("com.openelectrons" % "openelectrons-scalafmt-common-sbt-plugin" % "0.0.1" cross CrossVersion.full)
⚠️ 注意:由于sbt 1.6.2运行时依赖Scala 2.12,使用Scala 2.13编译的插件可能触发类加载冲突或兼容性错误,仅在确认插件无Scala版本特定依赖时尝试此方案。
内容的提问来源于stack exchange,提问作者joesan
相关产品推荐
相关产品推荐

