我正在尝试开发一个非常小的自动插件来覆盖所有项目和子项目的本地配置。具体来说,我希望我的插件更改 scalaVersion 并向包含它的项目的 scalacOptions 添加一个选项。我在文档中读到可以改变分配设置的顺序,但似乎我没有将它们分配给正确的项目。这是我到目前为止的代码:
// build.sbt
import AddSettings._
lazy val root = (project in file("."))
.settingSets(userSettings, defaultSbtFiles, autoPlugins, buildScalaFiles)
.settings(
sbtPlugin := true,
name := "sbt-scalafix-config",
organization := "io.prl-prg",
version := "0.0.1",
addSbtPlugin("org.some" % "some-other-plugin" % "0.5.3")
)
// PluginCode.scala
package config
import sbt._
import sbt.Keys._
object PluginCode extends AutoPlugin {
override def trigger = allRequirements
override lazy val projectSettings = Seq(
scalaVersion := "2.12.3",
scalacOptions := Seq( "-Yrangepos" )
)
println("[PluginCode Setup] Hello World!")
}
任何帮助表示赞赏。
你真的不想使用addSettings
,因为
AutoPlugin
s的行为,并且,AutoPlugin
s 不应该覆盖项目中的设置。项目应该始终对自己的设置拥有最终决定权,这样才有意义。
您可以scalacOptions
通过使用+=
代替:=
(在插件和项目中)轻松完成该部分。一般来说,您几乎永远不应该使用:=
Seq-settings,scalacOptions
尤其是。
override def projectSettings = Seq(
scalacOptions += "-Yrangepos"
)
对于scalaVersion
,好吧,如果项目明确设置scalaVersion
,则您AutoPlugin
无能为力来否决它。而且应该做不到。但是,如果项目未scalaVersion
在项目级别(但可能在in ThisBuild
级别)定义,则您可以获得所需的效果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句