Как использовать плагин 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?,