Как использовать плагин в проекте 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 репо в сбт в качестве резольвера. Но я просто хочу знать, есть ли другие способы сделать это.

2 ответа

Решение

Как объяснено здесь, вы можете поместить это в свой 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") 

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

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

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

С учетом вышесказанного, я думаю, что "правильный путь" в вашем случае, поскольку плагин sbt-scrooge, похоже, больше не поддерживается, - это разветвить проект и поддерживать себя в своем собственном хранилище. 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
Другие вопросы по тегам