Ответ 1
Изменить 2011:
С тех пор retronym (который отправил ответ на этой странице в 2010 году), сделал это sbt-plugin "sbt-onejar" , теперь в новый адрес в GitHub, с обновленными документами для SBT 0.12.
Упаковывает ваш проект с помощью One-JAR ™
onejar-sbt
- плагин простой сборки для создания единого исполняемого JAR, содержащего весь ваш код и зависимости в виде вложенных JAR.
В настоящее время используется одноранговая версия 0.9.7. Это включено в плагин, и его не нужно отдельно загружать.
Оригинальный ответ:
Непосредственно, это невозможно без расширения sbt (a пользовательского действия после модели "пакет" sbt action).
GitHub упоминает задачу сборки, выполненную для развертывания причала. Вы могли бы приспособить его для своей потребности.
код довольно общий (от этот пост и пользователя Rio):
project / build / AssemblyProject.scala
import sbt._
trait AssemblyProject extends BasicScalaProject
{
def assemblyExclude(base: PathFinder) = base / "META-INF" ** "*"
def assemblyOutputPath = outputPath / assemblyJarName
def assemblyJarName = artifactID + "-assembly-" + version + ".jar"
def assemblyTemporaryPath = outputPath / "assembly-libs"
def assemblyClasspath = runClasspath
def assemblyExtraJars = mainDependencies.scalaJars
def assemblyPaths(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) =
{
val (libs, directories) = classpath.get.toList.partition(ClasspathUtilities.isArchive)
for(jar <- extraJars.get ++ libs) FileUtilities.unzip(jar, tempDir, log).left.foreach(error)
val base = (Path.lazyPathFinder(tempDir :: directories) ##)
(descendents(base, "*") --- exclude(base)).get
}
lazy val assembly = assemblyTask(assemblyTemporaryPath, assemblyClasspath, assemblyExtraJars, assemblyExclude) dependsOn(compile)
def assemblyTask(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) =
packageTask(Path.lazyPathFinder(assemblyPaths(tempDir, classpath, extraJars, exclude)), assemblyOutputPath, packageOptions)
}