本地发布的SBT插件引入项目后执行报错排查
问题分析与解决步骤
第一个报错:Not a valid command: scalafmt
你的自定义插件仅负责生成通用配置文件,但未引入scalafmt官方的SBT插件,导致项目无法识别scalafmt命令。
解决:
在项目的plugins.sbt中同时添加官方scalafmt插件和你的自定义插件:
// 官方scalafmt插件,版本需与配置中的3.6.1兼容(2.5.0适配scalafmt 3.x系列) addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.0") // 你的自定义通用配置插件 addSbtPlugin("com.openelectrons" % "openelectrons-scalafmt-common-sbt-plugin" % "0.0.1")
第二个报错:missing setting 'version'
项目根目录的.scalafmt.conf未引用插件生成的.scalafmt-common.conf,导致scalafmt无法读取到version配置。
解决:
在项目根目录的.scalafmt.conf中添加引用语句:
// 引入插件生成的通用配置 include ".scalafmt-common.conf"
插件代码优化建议
当前插件每次加载SBT都会重复写入配置文件,可调整为仅在文件不存在时生成:
import sbt._ import Keys._ object MyScalafmtPlugin extends AutoPlugin { override def trigger = allRequirements override def requires = plugins.JvmPlugin val scalafmtGenerateConfig = taskKey[Unit]("Generate common scalafmt config") override def buildSettings: Seq[Def.Setting[_]] = Seq( scalafmtGenerateConfig := { val configFile = file(".scalafmt-common.conf") if (!configFile.exists()) { IO.write( configFile, """version = 3.6.1 |maxColumn = 120 |""".stripMargin ) } }, // 让配置生成任务在SBT加载时自动执行 onLoad in Global += (_ => scalafmtGenerateConfig.value) ) }
额外警告处理
关于publishMavenStyle的未使用警告,可直接删除该设置,或添加到忽略列表:
// 在项目build.sbt中添加 Global / excludeLintKeys += publishMavenStyle
内容的提问来源于stack exchange,提问作者joesan
相关产品推荐
相关产品推荐

