2014-06-15 31 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仓库。 –

相关问题