sbt - 基本的本地插件设置?

时间:2013-12-19 16:37:26

标签: scala sbt

我有一个特殊的任务,我想在构建过程中自动化,但我在语法阶段与sbt一起陷入困境。我正在尝试使用两个本地项目执行helloworld-ish任务,一个是插件,另一个是使用该插件的测试,但是我无法在插件(sampleIntTask)中获得新任务。在测试项目中使用sbt。

我在文件系统中有以下内容:

/plugin/
  Plugin.scala
  build.sbt
/test-using-plugin/
  build.sbt
  /project/plugins.sbt

我的helloworld-ish插件:Plugin.scala

import sbt._
import Keys._
object MyPlugin extends Plugin {
  val sampleIntTask = taskKey[Int]("sum 1 and 2")
  sampleIntTask := {
    val sum = 1 + 2
    println("sum: " + sum)
    sum
  }
}
plugin/build.sbt中的

sbtPlugin := true

name := "myPlugin"

version := "0.1"

scalaVersion := "2.10.3"

并测试它:在test-using-plugin/build.sbt

name := "test-test-test"

version := "0.1"

scalaVersion := "2.10.3"

test-using-plugin/project/plugins.sbt

lazy val root = project.in( file(".") ).dependsOn( testPlugin )

lazy val testPlugin = file("/Users/cap10/gitprojects/processing")

当我/test-project$ sbt sampleIntTask时,我得到:

[info] Set current project to test-using-plugin (in build ...)
> sampleIntTask
[error] Not a valid command: sampleIntTask
[error] Not a valid project ID: sampleIntTask
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: sampleIntTask (similar: compileInputs)
[error] sampleIntTask
[error]              ^

我觉得这是关于这个测试的正确级别的复杂性(定义插件项目配置,定义插件项目行为,定义测试项目配置,添加对插件项目的依赖),但我不会惊讶,如果我是完全取决于语法,因为我无法做出sbt介绍的正面或反面。

1 个答案:

答案 0 :(得分:3)

build.sbt

如果您不需要跨多个版本共享设置,只需将设置添加到test-using-plugin/custom.sbt

val sampleIntTask = taskKey[Int]("sum 1 and 2")

sampleIntTask := {
  val sum = 1 + 2
  println("sum: " + sum)
  sum
}

忘了插件。

本地插件方式

我没有测试其他部分,但您的Plugin.scala错了。 设置表达式需要在设置顺序中:

import sbt._
import Keys._

object MyPlugin extends Plugin {
  val sampleIntTask = taskKey[Int]("sum 1 and 2")

  lazy val baseMyPluginSettings: Seq[sbt.Def.Setting[_]] = Seq(
    sampleIntTask := {
      val sum = 1 + 2
      println("sum: " + sum)
      sum
    }
  )
  lazy val myPluginSettings: Seq[sbt.Def.Setting[_]] = baseMyPluginSettings
}

test-using-plugin/build.sbt添加:

myPluginSettings

如果必须跨构建共享设置,可以创建这样的插件或将它们放在全局sbt文件中。全局sbt的使用应限于用户特定的设置和命令,因此这样做。就个人而言,我会使用publishLocal在本地发布插件,因此它不依赖于特定的文件路径。您可以像使用任何其他插件一样使用本地发布的插件:

addSbtPlugin("com.example" % "myPlugin" % "0.1" changing())

使用“-SNAPSHOT”版本或致电changing(),sbt将检查最新版本。