Настройка параметров сторонних плагинов в sbt AutoPlugin

У меня есть 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

В чем может быть проблема?

1 ответ

Эта проблема, скорее всего, вызвана порядком применения настроек. Если ваш плагин и плагин, от которого вы зависите, являются автоматическими плагинами, requires Значение определяет порядок, в котором включены параметры проекта.

Scalastyle по-прежнему использует старый формат плагинов. Это также не следует за лучшими методами. Не должен устанавливать projectSettings так как это затрудняет его отключение в сборках нескольких проектов. И это также препятствует тому, чтобы Вы легко расширили это от своего пользовательского плагина. Я не уверен, определен ли порядок, в котором применяются параметры проекта, или порядок, в котором загружаются плагины.

Самым простым решением было бы сделать Scalastyle AutoPlugin и зависеть от этого с помощью requires значение. В противном случае, вероятно, довольно сложно выяснить, что определяет порядок.

Другие вопросы по тегам