В sbt, как вы добавляете плагин в локальную файловую систему?

Если я хочу добавить плагин, который находится в локальном каталоге за пределами дерева проектов, какой правильный способ сделать это? Скажем, я клонировал что-то простое, например https://github.com/steppenwells/sbt-sh.git в /tmp/sbt -sh - что я вставляю в свой файл build.sbt для использования плагина из /tmp/sbt -sh, который будет получать любые изменения, которые я делаю в/tmp/sbt-sh?

Ответ 1

Что-то вроде этого в project/project/Build.scala должно сделать это:

import sbt._
object PluginDef extends Build {
    lazy val projects = Seq(root)
    lazy val root = Project("plugins", file(".")) dependsOn( shPlugin )
    lazy val shPlugin = uri("file:///tmp/sbt-sh")
}

Обратите внимание, что требуются дважды вложенные каталоги project. Я не знаю, как это сделать из файла .sbt (может быть, есть способ, но я не знаю, что это такое).

Это документировано здесь (см. "1d)" Зависимость проекта").

Ответ 2

В 0.13 есть а) простой способ сделать это и б) лучшая документация. Ответ @PaulButcher указывает на раздел 1d документации sbt для плагинов, в которой теперь говорится, что нужно отредактировать проект /plugins.sbt:

(@axel22 указывает, что это изменилось, поэтому проверьте текущий документ, прежде чем скопировать это)

lazy val root = project.in( file(".") ).dependsOn( assemblyPlugin )
lazy val assemblyPlugin = uri("git://github.com/sbt/sbt-assembly#0.9.1")

И, конечно, этот uri (... может быть заменен файлом ("/tmp/sbt-sh").