I'm using sbt 0.10 with Scala 2.9.1.
I've read
http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars#987b6af687b8e33b
However I don't want a one huge jar. I just want dependency jars
ending up in target/scala-2.9.1.final/lib directory.
The reason why I don't want a one huge jar, that project uses a lot of
libs, and usually only the application .jar changes. However as this
is multi-language project and not all team members have scala or sbt,
jars are just commited to git. Having one huge dar updated regullary
would inflate repo size.
How can I copy those dependencies? ;)
You didn't specify the ivy configuration to copy the configurations from but here's a fully working example that will copy all your managed dependencies to the target/<scala version>/lib
folder (scala version is given by the crossTarget task). Just copy this and put it in the file project/Build.scala
(or whatever filename you want) :
import sbt._
import Keys._
object MyBuild extends Build {
lazy val copyDependencies = TaskKey[Unit]("copy-dependencies")
def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map {
(updateReport, out, scalaVer) =>
updateReport.allFiles foreach { srcPath =>
val destPath = out / "lib" / srcPath.getName
IO.copyFile(srcPath, destPath, preserveLastModified=true)
}
}
lazy val root = Project(
"root",
file("."),
settings = Defaults.defaultSettings ++ Seq(
copyDepTask
)
)
}
If you want a specific configuration, replace
updateReport.allFiles
by updateReport.select(configuration = Set("compile"))
or whatever ivy configuration you want.
The various "Classpath" keys contain different views onto the classpath, but probably the easiest thing is to modify the sbt-assembly plugin to simply drop the jars into a directory instead of doing the unzip/rezip cycle. The plugin is very small (only 150 lines) and it's pretty obvious from a cursory glance what the right place to change is.
See task xitrum-package:
https://github.com/ngocdaothanh/xitrum/blob/master/plugin/src/main/scala/XitrumPlugin.scala
It copies all dependencies to directory target/xitrum_package.