我开始看看sbt插件,我有这个类:
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存储库的链接。
答案 0 :(得分: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")
)
}
此外,您还创建了一个显式启用的自动插件。因此,您还需要在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
或