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