2014-10-10 52 views
2

我创建了一个新的scala项目,并在目录和相应的命名空间下编写了AutoPlugin。插件代码是来自[1]的HelloPlugin3的剪切和粘贴,但是我更改了名称。使用自定义sbt插件

然后,在第二个sbt项目中,我更新了project/plugins.sbt文件以包含我的新Hello World插件。这第二个项目有其他'业务代码'英寸当我在第二个项目中运行sbt时,插件已解决,我已经通过从~/.ivy/local/...下删除了该jar,然后重新加载项目并目击sbt抱怨它可以找不到插件。当我的publishLocal我的插件项目再次,该错误消失。

所以我很高兴插件已解决,并且jar文件不是空的,因为我已经检查了它的内容。

但是,当我做一个sbt> about我的自定义插件没有列出,并且我期望可用的命令不是。 (“[error]不是有效的命令:hello”)。但是我在plugins.sbt(io.spray sbt-revolver)中列出的另一个插件确实出现在输出中。

插件项目和第二个项目都在其build.sbt文件中指定scalaVersion := "2.10.3"

我正在使用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 
    } 

} 

编辑:

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配置中,你是否指定它是一个带有'sbtPlugin:= true'的sbt插件? – johanandren 2014-10-11 14:18:09

+0

是的,我有。我编辑了这个问题,并给出了插件项目的整个'build.sbt'。 – Tom 2014-10-11 17:22:20

回答

0

的问题结束了与该项目的project/build.properties尝试使用该插件。该文件将sbt版本设置为0.13.1,由于某些原因,我的插件和命令都不起作用。

将值更改为0.13.6使所有问题消失。