我正在尝试开发一个非常小的autoplugin来覆盖所有项目和子项目的本地配置。具体来说,我希望我的插件能够更改scalaVersion并为包含它的项目的scalacOptions添加一个选项。 I have read in the documentation可以改变分配设置的顺序,但似乎我没有将它们分配给正确的项目。 这是我到目前为止的代码:
// 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!")
}
感谢任何帮助。
答案 0 :(得分:0)
你真的不想使用addSettings
,因为
AutoPlugin
的行为, AutoPlugin
不应该覆盖项目中的设置。项目应始终对自己的设置有最终决定权,这是有道理的。
您可以使用scalacOptions
代替+=
轻松执行:=
部分(在项目中的插件和中)。一般情况下,您几乎不应将:=
与Seq设置一起使用,特别是scalacOptions
。
override def projectSettings = Seq(
scalacOptions += "-Yrangepos"
)
对于scalaVersion
,如果项目明确设置了scalaVersion
,则AutoPlugin
无法覆盖它。它应该不能。但是,如果项目未在项目级别定义scalaVersion
(例如,可能在in ThisBuild
级别),则可以获得所需的效果。