Я создал новый проект scala и написал AutoPlugin
под ним в каталоге src/main/scala/com/company/plugin
и соответствующем пространстве имен. Код плагина - это вырезание и вставка HelloPlugin3
из [1], однако я изменил имена.Использование пользовательского плагина sbt
Затем, во втором проекте sbt, я обновил файл project/plugins.sbt
, включив в него новый плагин Hello World. У этого второго проекта есть другой «бизнес-код». Когда я запускаю sbt во втором проекте, плагин разрешен, и я тестировал это, удалив банку из-под ~/.ivy/local/...
, а затем перезагрузив проект и наблюдая, как sbt жалуется, что он может Не находите плагин. Когда I publishLocal
мой проект плагина снова, эта ошибка уходит.
Так что я рад, что плагин разрешен, и файл jar не пуст, потому что я проверил его содержимое.
Однако, когда я делаю sbt> about
, мой пользовательский плагин не указан, и команда, которую я ожидал быть доступной, - нет. ("[error] Недействительная команда: hello"). Но другой плагин, который я перечисляю в plugins.sbt (io.spray sbt-revolver), появляется на выходе.
Как проект плагина, так и второй проект имеют scalaVersion := "2.10.3"
, указанные в их файлах build.sbt
.
Я использую sbt 0.13.6. Интересно, и, возможно, связанная, команда sbt plugins
, по-видимому, не является действительной в этом проекте, хотя она очень хорошо работает в проекте плагина.
Какой дополнительный шаг я пропустил, чтобы сделать команду доступной для моего второго проекта? Как проверить, есть ли у меня какая-то особенно перепутанная конфигурация sbt?
Для удобства приведенный ниже код плагина, но, как уже упоминалось, это копия из ссылки под ним.
package com.company.plugin
import sbt._
import Keys._
object HelloPlugin extends AutoPlugin {
object autoImport {
val greeting = settingKey[String]("greeting")
}
import autoImport._
override def trigger = allRequirements
override lazy val buildSettings = Seq(
greeting := "Hi",
commands += helloCommand)
lazy val helloCommand =
Command.command("hello") { (state: State) =>
println("fred")
state
}
}
Edit:
build.sbt
для проекта плагина, как следующим образом;
sbtPlugin := true
scalaVersion := "2.10.3"
organization := "com.company"
name := "name"
version := "0.0.1-SNAPSHOT"
Единственный файл я создал в этом проекте является .scala
файл для самого плагина.
[1] http://www.scala-sbt.org/release/docs/Plugins.html
В конфигурации sbt проекта, где установлен плагин, вы указали, что это sbt-плагин с 'sbtPlugin: = true' ?? – johanandren
Да, у меня есть. Я отредактировал вопрос и дал весь проект 'build.sbt' для проекта плагина. – Tom