Scala 在sbt AutoPlugin中设置第三方插件设置

Scala 在sbt AutoPlugin中设置第三方插件设置,scala,plugins,sbt,scalastyle,Scala,Plugins,Sbt,Scalastyle,我有一个AutoPlugin,它聚合了几个第三方插件,并为我们公司定制了它们的设置。对于大多数插件来说,将它们放在项目设置中即可: override lazy val projectSettings = Seq( somePluginSetting := "whatever" ) 我也试着为ScalaStyle这样做: import org.scalastyle.sbt.ScalastylePlugin.scalastyleConfigUrl override lazy val projec

我有一个AutoPlugin,它聚合了几个第三方插件,并为我们公司定制了它们的设置。对于大多数插件来说,将它们放在
项目设置中即可:

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"))
)
此设置在使用my plugin的项目中永远不可见,而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插件示例来说明问题:


可能是什么问题?

此问题很可能是由应用设置的顺序引起的。如果您的插件和您所依赖的插件都是自动插件,
requires
值决定了包含项目设置的顺序

Scalastyle仍然使用旧的插件格式。它也没有遵循最佳实践。它不应该设置
projectSettings
,因为这样很难在多项目生成中禁用它。而且它还阻止您从自定义插件轻松扩展它。我不确定应用项目设置的顺序是定义的,还是由加载插件的顺序决定的


最简单的修复方法是将Scalastyle设置为
AutoPlugin
,并使用
requires
值依赖于它。否则,找出决定顺序的因素可能会非常棘手。

你能给出一个以前有效但不再有效的项目吗?我将尝试创建一个最小的项目,显示问题,并通过链接更新到示例项目0.5.0是否有效?有趣的故事。。。我是编写
scalastyleConfigUrl
更改的人。无论如何,我们公司有一个原因,直到今天我们才真正使用我的更改。。。我发现自从我做了更改后,插件被重构了一些,所以不仅自述文件过时了,而且设置也无法正常工作。我不知所措,在github上搜索使用我的功能的人,我找到了你的回购协议。小世界。现在,我通过在Compile
范围中使用
来“修复”这个问题。就我而言,我可以通过在Compile
中设置
scalastyleConfigUrl来修复这个问题——这个问题不会被ScalaStyle覆盖。然而,Test中的
版本是,因此它不是一个完整的解决方案。我可能会尝试让ScalaStyle成为一个合适的自动导航器,看看效果如何。