Как использовать плагин в проекте sbt, когда доступны только источники плагина?

Я хочу использовать плагин sbt-scrooge, но его репо сейчас недоступно - http://koofr.github.com/.

Я думал, что включу этот исходный код плагина непосредственно в свое собственное репо (как подмодуль git).

Я пробовал:

git submodule add https://github.com/bancek/sbt-scrooge.git project/sbt-scrooge

и добавил:

addSbtPlugin("net.koofr" % "sbt-scrooge" % "3.0.45")

до project/plugins.sbt. Но это не сработает - выбрано следующее исключение:

sbt.ResolveException: неразрешенная зависимость: net.koofr # sbt-scrooge; 3.0.45: не найден

Какой правильный способ сделать это?

Я знаю, что я могу проверить sbt-scrooge на локальную файловую систему, затем sbt publish-local и добавить локальный репозиторий ivy2 в sbt в качестве преобразователя. Но я просто хочу знать, есть ли другие способы сделать это.

Ответ 1

Как объяснено здесь, вы можете указать это в своем project/plugins.sbt:

lazy val root = project.in(file(".")).dependsOn(scroogePlugin) 

lazy val scroogePlugin = file("sbt-scrooge") 

Или просто (без создания локального подмодуля):

lazy val root = project.in(file(".")).dependsOn(scroogePlugin) 

lazy val scroogePlugin = uri("https://github.com/bancek/sbt-scrooge.git") 

Ответ 2

Если вы хотите использовать плагин, он должен быть доступен для sbt (и каким-то образом находит свое место в вашем локальном репозитории, поэтому addSbtPlugin может его найти, или проект project (sub) вашего проекта sbt должен иметь это на пути к классам).

Учтите, что не все плагины должны быть неотъемлемой частью проекта sbt. Совсем наоборот - они могут использоваться в проекте, но это не обязательно означает, что на них должны ссылаться любые файлы, специфичные для проекта (в каталоге проекта), например. плагинов для создания файлов, специфичных для IDE. Эти плагины должны быть частью глобальной конфигурации в ~/.sbt в разделе plugins.

Там также проблема несоответствия версии между плагинами и sbt. В вашем случае sbt-scrooge поддерживает 0.12.2 (см. project/build.properties), который может быть непригодным для использования в sbt 0.13 +.

С учетом сказанного я думаю, что "правильный путь" в вашем случае, поскольку плагин sbt-scrooge, похоже, больше не поддерживается, это fork проекта и поддерживать себя в своем собственном репозитории. sbt 0.13.1 уже является последней версией, и плагин, возможно, еще не поддерживает его. Когда плагин получает новую жизнь с помощью своей вилки, другие разработчики могут воспользоваться воскресением, а источники, прикрепленные к другому проекту, будут только препятствовать повторному использованию.

Ответ на аналогичный вопрос помог мне предложить рабочее решение, которое работает с sbt 0.12.2 и без клонирования репозитория git.

$ cat project/build.properties
sbt.version=0.12.2

$ cat project/project/SbtScroogePlugin.scala
import sbt._

object SbtScroogePlugin extends Build {
    lazy val plugins = Project("plugins", file(".")) dependsOn sbtScroogePlugin
    lazy val sbtScroogePlugin = uri("https://github.com/bancek/sbt-scrooge.git")
}

$ cat sbt-scrooge.sbt
import net.koofr.sbt._

seq(CompileThriftScrooge.newSettings: _*)

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

$ sbt
[info] Loading global plugins from /Users/jacek/.sbt/plugins
[info] Loading project definition from /Users/jacek/sandbox/tmp/sample-project/project/project
[info] Loading project definition from /Users/jacek/.sbt/staging/52a2b7ff1377492a32ff/project
[info] Loading project definition from /Users/jacek/sandbox/tmp/sample-project/project
[info] Set current project to default-fe8e50 (in build file:/Users/jacek/sandbox/tmp/sample-project/)
> about
[info] This is sbt 0.12.2
[info] The current project is {file:/Users/jacek/sandbox/tmp/sample-project/}default-fe8e50
[info] The current project is built against Scala 2.9.2
[info] Available Plugins: org.sbtidea.SbtIdeaPlugin, com.timushev.sbt.updates.UpdatesPlugin, net.koofr.sbt.CompileThriftScrooge
[info] sbt, sbt plugins, and build definitions are using Scala 2.9.2
> scrooge-version
[info] 3.0.43

Для других задач и настроек напишите scrooge- и нажмите TAB.

> scrooge-[TAB]
scrooge-build-options                   scrooge-cache-folder                    scrooge-fetch                           scrooge-gen
scrooge-jar                             scrooge-name                            scrooge-thrift-external-source-folder   scrooge-thrift-include-folders
scrooge-thrift-namespace-map            scrooge-thrift-output-folder            scrooge-thrift-source-folder            scrooge-thrift-sources
scrooge-unpack-deps                     scrooge-version