2014-06-15 78 views
1

我開始在看看SBT插件,我有這個類:如何開發將從命令行調用的自定義任務(在autoplugin中)?

package msbt.test.plugin 

import sbt._ 
import Keys._ 

object SbtTest extends AutoPlugin { 

    object autoImport { 
    lazy val hello = taskKey[Unit]("Prints 'Hello World'") 
    } 

    import autoImport._ 
    hello := println("hello world") 
} 

我想調用命令行的任務。我如何將此添加到我的Build.scala?我不能從那裏到達包:

import sbt._ 
import msbt.test.plugin._ // this cannot be resolved 

object SbtGitBuild extends Build {} 

當然,這也工作,如果我手動將其添加到構建文件或build.sbt文件是這樣的:

sbtPlugin := true 

name := "sbt-test-plugin" 

version := "0.1-SNAPSHOT" 

scalaVersion := "2.10.4" 

lazy val hello = taskKey[Unit]("Prints 'Hello World'") 

hello := println("hello world!") 

然後從控制檯我可以調用hello,但我當然希望能夠構造我的代碼,並避免將其扔到構建文件中。這可能嗎?我是否需要另外一個導入我的插件來使用和測試它的sbt項目?如果是的話哪種方法最快?

因爲我是初學者,所以我編寫並測試了每一段代碼,最好有一種快速的方法將更新包含到另一個項目中。

Here鏈接到Github存儲庫。

回答

2

你需要把你的設置中包含在項目的設置序列中的一個,像project/SbtTest.scala

package msbt.test.plugin 

import sbt._ 
import Keys._ 
import File 

object SbtTest extends AutoPlugin { 

    object autoImport { 
    lazy val hello = taskKey[Unit]("Prints 'Hello World'") 
    } 

    import autoImport._ 
    override def projectSettings = Seq(
    hello := println("hello world") 
) 
} 

此外,您已經創建了一個autoplugin這是明確啓用。所以你還需要啓用該插件在project/build.scala

import sbt._ 
import msbt.test.plugin._ // this cannot be resolved 

object SbtGitBuild extends Build { 
    lazy val root = project.in(file(".")).enablePlugins(SbtTest) 
} 

你需要重寫trigger方法是

override def trigger = allRequirements 

爲AutoPlugin類scaladoc是相當不錯的,雖然格式是壞:

http://www.scala-sbt.org/0.13.5/api/index.html#sbt.AutoPlugin

http://www.scala-sbt.org/0.13.5/sxr/sbt/Plugins.scala.html

+0

我都試過,但技術途徑都沒有的工作,加入這個'.enablePlugins(SbtTest)'給了我一個編譯錯誤,因爲'SbtTest'無法找到(我也不能導入包哪裏它的定義),而對於觸發器,我不知道該怎麼做,我嘗試了'allRequirments',但仍然找不到命令。 –

+0

您可能需要發送更多構建以獲得幫助。 – jsuereth

+0

我用所有的代碼添加了一個鏈接到git倉庫。 –

相關問題