我正在尝试开发一个非常小的自动插件来覆盖所有项目和子项目的本地配置。具体来说,我希望我的插件改变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!")
}任何帮助都是非常感谢的。
发布于 2017-10-27 13:20:11
您真的不想使用addSettings,因为
AutoPlugin的行为,AutoPlugin不应该覆盖项目中的设置。项目应该始终对自己的设置有最终决定权,所以这是有意义的。
通过使用scalacOptions而不是:= (在插件和项目中),您可以轻松地完成+=部分。一般来说,您实际上不应该在Seq-设置中使用:=,特别是scalacOptions。
override def projectSettings = Seq(
scalacOptions += "-Yrangepos"
)对于scalaVersion,如果项目显式地设置了scalaVersion,那么您的AutoPlugin就无法阻止它。而且它不应该。但是,如果项目没有在项目级别定义scalaVersion (但可能在in ThisBuild级别),则可以获得所需的效果。
https://stackoverflow.com/questions/46974733
复制相似问题