我有一个AutoPlugin,它聚合了几个第三方插件,并为我们公司定制了他们的设置。对于大多数插件,只需将它们放在projectSettings
:
override lazy val projectSettings = Seq( somePluginSetting := "whatever" )
我也尝试为ScalaStyle执行此操作:
import org.scalastyle.sbt.ScalastylePlugin.scalastyleConfigUrl
override lazy val projectSettings = Seq(
scalastyleConfigUrl := Some(url("http://git.repo/scalastyle-config.xml"))
)
此设置在使用我的插件的项目中永远不可见,而sbt使用插件提供的默认值:
> inspect scalastyleConfigUrl
[info] Setting: scala.Option[java.net.URL] = None
[info] Description:
[info] Scalastyle configuration file as a URL
[info] Provided by:
[info] {file:/Users/kaeser/Documents/workspace/ci-test-project/}root/*:scalastyleConfigUrl
[info] Defined at:
[info] (org.scalastyle.sbt.ScalastylePlugin) Plugin.scala:101
[info] Delegates:
[info] *:scalastyleConfigUrl
[info] {.}/*:scalastyleConfigUrl
[info] */*:scalastyleConfigUrl
[info] Related:
[info] test:scalastyleConfigUrl
当我直接将设置放入build.sbt时,它会按预期工作。
我做了一个简单的示例sbt插件,显示了问题:https://github.com/jastice/sbt-customsettings
问题可能是什么?
答案 0 :(得分:3)
此问题很可能是由应用设置的顺序引起的。如果您所依赖的插件和插件都是自动插件,requires
值将决定包含项目设置的顺序。
Scalastyle仍然使用旧的插件格式。它也没有遵循最佳实践。它不应该设置projectSettings
,因为这使得在多项目构建中很难禁用它。它还可以防止您轻松地从自定义插件中扩展它。我不确定是否定义了应用项目设置的顺序,或者是否由加载插件的顺序决定。
最简单的解决方法是让Scalastyle成为AutoPlugin
,并使用requires
值依赖它。否则,找出决定订单的因素可能会非常棘手。