2014-10-10 50 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使所有問題消失。