升级到sbt 1.x后,编译时运行Scalastyle提示找不到scalastyle值
解决sbt 1.x中Scalastyle编译时运行报错的问题
你遇到的not found: value scalastyle错误,核心原因是没有正确引入Scalastyle的sbt插件——sbt 1.x和0.13的插件管理方式有差异,仅在build.sbt里写任务依赖是不够的,需要先在插件配置文件中声明依赖。
正确配置步骤:
添加Scalastyle插件依赖
在项目的project/plugins.sbt文件中(如果没有就新建一个),添加插件的声明:addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")注意选择与sbt 1.x兼容的版本(比如1.0.0及以上的插件版本都支持sbt 1.x)。
配置编译时自动运行Scalastyle
在build.sbt中,只需要让编译任务依赖Scalastyle的编译阶段任务即可,不需要自定义额外的TaskKey(插件已经内置了scalastyle任务):(compile in Compile) := ((compile in Compile) dependsOn scalastyle.in(Compile)).value或者更简洁的写法:
compile in Compile := (compile in Compile).dependsOn(scalastyle in Compile).value
为什么之前的配置会报错?
你之前的代码里尝试自定义compileScalaStyle任务,但因为没有引入Scalastyle插件,sbt根本不知道scalastyle这个任务是什么,所以抛出了找不到值的错误。插件引入后,相关的任务和配置会自动被sbt识别,不需要额外的导入语句。
(可选)保留自定义任务名称
如果你想保留原来的compileScalaStyle任务名称,在插件引入后可以这样写:
lazy val compileScalaStyle: TaskKey[Unit] = taskKey[Unit]("scalastyle") compileScalaStyle := scalastyle.in(Compile).toTask("").value (compile in Compile) := ((compile in Compile) dependsOn compileScalaStyle).value
这样配置后,执行sbt compile时就会自动先运行Scalastyle检查了。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

