I'm not sure how to do it with new task but you can define additional configurations and run them like sbt prod:assembly
and sbt local:assembly
:
lazy val Prod = config("prod") extend(Compile) describedAs("scope to build production packages")
lazy val Local = config("local") extend(Compile) describedAs("scope to build staging packages")
val root = (project in file(".")).configs(Prod, Local)
.settings(inConfig(Local)(Classpaths.configSettings ++ Defaults.configTasks ++ baseAssemblySettings ++Seq(
assemblyJarName := "local.jar",
assemblyMergeStrategy in assembly := {
case PathList("local.conf") => MergeStrategy.discard
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
))).settings(inConfig(Prod)(Classpaths.configSettings ++ Defaults.configTasks ++ baseAssemblySettings ++ Seq(
assemblyJarName := "prod.jar",
assemblyMergeStrategy in assembly := {
case PathList("application.conf") => MergeStrategy.discard
case PathList("local.conf") => new MyMergeStrategy()
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
)))
And your own MergeStrategy that renames file to application.conf:
import java.io.File
import sbtassembly.MergeStrategy
class MyMergeStrategy extends MergeStrategy{
override def name: String = "Rename to application.conf"
override def apply(tempDir: File, path: String, files: Seq[File]): Either[String, Seq[(File, String)]] = {
Right(files.map(_ -> "application.conf"))
}
}
Also for a more information you can refer to this article:
http://eed3si9n.com/4th-dimension-with-sbt-013
Or this stackoverflow answer:
Multiple executable jar files with different external dependencies from a single project with sbt-assembly