2014-10-10 8 views
2

Я создал новый проект 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

+0

В конфигурации sbt проекта, где установлен плагин, вы указали, что это sbt-плагин с 'sbtPlugin: = true' ?? – johanandren

+0

Да, у меня есть. Я отредактировал вопрос и дал весь проект 'build.sbt' для проекта плагина. – Tom

ответ

0

Проблема закончилась тем, что с project/build.properties проекта пытается использовать плагин. Этот файл устанавливает версию sbt на 0.13.1, что по какой-то причине приводит к тому, что мой плагин и команда sbt plugins не работают.

Изменение значения до 0.13.6 привело к устранению всех проблем.

Смежные вопросы