让SBT任务依赖于OneJar任务

时间:2012-07-06 16:03:21

标签: scala sbt

我在完成新的SBT任务时遇到了问题'安装'依赖于OneJar任务。这是我的Build.scala文件:

import sbt._
import Keys._
import com.github.retronym.SbtOneJar._

object BuildBroBuild extends Build {
  val install = TaskKey[Unit]("install", "Installs the JAR and a launcher script into your homedir")

  private def installTask = task {
    println("Hello world!")
  }

  override lazy val settings = super.settings ++
    Seq(install <<= (oneJar in Global)(installTask dependsOn(_)))

  lazy val root = Project(id = "buildbro",
                          base = file("."),
                          settings = Project.defaultSettings)
}

这就是我得到的错误:

[error] Reference to undefined setting: 
[error] 
[error]   */*:one-jar from {.}/*:install
[error]      Did you mean *:one-jar ?
[error]  

有人知道这意味着什么吗?我相信我必须以不同的方式确定oneJar TaskKey的范围。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为这样的事情应该有效:

object BuildBroBuild extends Build {
  val install = TaskKey[Unit]("install", "Installs the JAR and a launcher script into your homedir")

  private lazy val installTask = install <<= (oneJar, streams) map { case (a, s) => {
    // 'a' is the output from the onejar task (ie, the artifact)
    println("Hello world!")
  }

  override lazy val settings = super.settings ++
    Seq(installTask)

  lazy val root = Project(id = "buildbro",
                          base = file("."),
                          settings = Project.defaultSettings)
}

在这里,我们将oneJar任务的输出(以及允许记录等的streams)作为新任务的输入。