Reputation: 9026
I'd like to create a task that does a deliver-local followed by a copy of the .xml file to ivy.xml in the project root. I'd like it to be available from every sbt command line, so I'm putting it in ~/.sbt/0.13/plugins.
I'm confused about how to reference the value from deliverLocal, though. If I do this:
import sbt._
import Keys._
object JivyBuild extends Build {
lazy val jivy = TaskKey[String] ( "jivy", "Copy the ivy file created by deliverLocal to ivy.xml" )
lazy val jivyTask = jivy := {
val ivyFile = deliverLocal.value
com.google.common.io.Files.copy(ivyFile, baseDirectory.value / "ivy.xml")
println(s"base dir is " + baseDirectory.value.toString)
ivyFile.toString
}
override lazy val settings = super.settings ++
Seq(jivyTask, resolvers := Seq())
lazy val root = Project(id = "root",
base = file("."),
settings = Project.defaultSettings ++ settings)
}
I get this error when I start sbt:
[error] Reference to undefined setting:
[error]
[error] {.}/*:deliverLocal from {.}/*:jivy (/Users/james/.sbt/0.13/plugins/Jivy.scala:8)
[error] Did you mean *:deliverLocal ?
[error]
[error] Use 'last' for the full log.
Upvotes: 0
Views: 164
Reputation: 6779
You are overriding the default settings and so the deliverLocal setting gets obliterated. Don't do so, instead change:
override lazy val settings = super.settings ++
Seq(jivyTask, resolvers := Seq())
to something like:
lazy val mysettings = super.settings ++
Seq(jivyTask, resolvers := Seq())
And refer to it in root instead of settings
:
lazy val root = Project(id = "root",
base = file("."),
settings = Project.defaultSettings ++ mysettings)
Upvotes: 3