Как использовать плагин SBT в собственном проекте плагина?

Я делаю первые шаги с плагином SBT.

object WoahPlugin extends Plugin {
  override lazy val settings = commands += thingCommand

  lazy val thingCommand = Command.command("thing") {state: State =>
    println("this is the thing~!")
    state
  }
}

После определения команды я хочу попробовать ее. Нужно ли мне создавать плагин и определять новый проект, который использует его, чтобы опробовать его? Или я могу открыть сеанс SBT в проекте плагина и импортировать его напрямую?

1 ответ

Решение

tl;dr У вас не может быть проекта плагина, и вы не сможете протестировать его без другого проекта, который его использует.

Плагин улучшает определение сборки проекта, поэтому вы настраиваете плагин, который расширяет возможности вашего проекта - дополнительные настройки и задачи. Смотрите плагины в официальной документации sbt.

Вы устанавливаете плагины в метапроекте project каталог, как правило, в project/plugins.sbt (но любой project/*.sbt файл будет делать).

Если вам нужно протестировать плагин, у вас есть два примечательных варианта, которые сводятся к тому, чтобы иметь отдельный проект для плагина и другой для его использования - выбор заключается в том, где находится тестовый проект по сравнению с проектом плагина под тестовое задание.

Плагин проекта в project metaproject

Вы можете иметь источники плагина под project/src/main/scala поэтому они принадлежат их собственному проекту, но из-за каталога, в котором они живут projectони автоматически становятся частью метапроекта для другого проекта на один уровень выше.

С источниками плагина внутри метапроекта project Вы можете определить зависимость плагина в project/plugins.sbt и установить плагин ( учитывая последние изменения в sbt начиная с 0.13.5, это не обязательно означает, что плагин включен).

Проект плагина где угодно

Проект плагина является проектом sbt, и на него можно ссылаться из другого проекта sbt, используя ProjectRef, Если это git:// или же file:// проект, вы объявляете зависимость от проекта плагина, используя dependsOn и ссылка на проект с ProjectRef,

См. Могут ли мультипроекты из GIT использоваться как зависимости SBT? и как sbt может извлечь артефакты зависимости из git?,

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