Плагин SBT: распространение модуля компиляции и включение подключаемого модуля вниз по течению - PullRequest
0 голосов
/ 17 декабря 2018

Я видел SBT Plugin: Как добавить плагин компилятора в качестве зависимости, которая не распространяется вниз по течению? , но это не отвечает на мой вопрос.

Вот структура:

other plugins
    |-----> added to my own plugin
                |-----> Consumer project

consumer project необходимо добавить addCompilerPlugin и enablePlugins в свои build.sbt из-за other plugins.

Я добавил other plugins в build.sbt из my own plugin.

Где я могу поместить addCompilerPlugin и enablePlugins в мой плагин, чтобы consumer project не пришлось делать это самостоятельно?

Спасибо

1 Ответ

0 голосов
/ 18 декабря 2018

addCompilerPlugin - это просто ярлык для изменения определенной клавиши настройки, а enablePlugins - это метод для изменения самой конфигурации проекта.Следовательно, эти вещи находятся на разных уровнях и поэтому обрабатываются по-разному для вашей цели.

Чтобы включение вашего плагина также включало другие плагины, вам нужно изменить объявление requires в вашем плагине:

object YourPlugin extends AutoPlugin {
  override def requires: Plugins = FirstDependencyPlugin & SecondDependencyPlugin
}

Теперь, когда ваш плагин добавлен в проект:

lazy val someProject = project.enablePlugins(YourPlugin)

, тогда плагины FirstDependencyPlugin и SecondDependencyPlugin также будут включены.

Комучтобы включить плагин компилятора, вам просто нужно убедиться, что ваш плагин предоставляет определение настроек, возвращаемое addCompilerPlugin:

object YourPlugin extends AutoPlugin {
  override def projectSettings: Seq[Def.Setting[_]] = super.projectSettings ++ Vector(
    addCompilerPlugin("com.example" % "some-plugin" % "1.2.3")
  )
}

Теперь, когда ваш плагин добавляется в проект, Def.Setting[_], предоставленный имбудет автоматически применен к этому проекту, и он будет использовать указанный плагин компилятора для сборки вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...