Ответ 1
Публикация для sbt-assembly - это инструкции для одного проекта и не легко переводится в мультипроект.
Люди публикуют толстый JAR, используя sbt-assembly и sbt-release без проблем. Вот статья блога с 2011 года: Публикация толстой банки, созданная sbt-assembly. Это сводится к добавлению addArtifact(Artifact(projectName, "assembly"), sbtassembly.AssemblyKeys.assembly)
к вашему build.sbt
(обратите внимание, что блог немного устарел AssemblyKeys
теперь является членом sbtassembly
напрямую).
Для sbt 0.13 и выше я предпочитаю использовать build.sbt
для мультипроектов, поэтому я бы написал его так:
import AssemblyKeys._
lazy val commonSettings = Seq(
version := "0.1-SNAPSHOT",
organization := "com.example",
scalaVersion := "2.10.1"
)
val app = (project in file("app")).
settings(commonSettings: _*).
settings(assemblySettings: _*).
settings(
artifact in (Compile, assembly) ~= { art =>
art.copy(`classifier` = Some("assembly"))
}
).
settings(addArtifact(artifact in (Compile, assembly), assembly).settings: _*)
См. Определение пользовательских артефактов:
addArtifact возвращает последовательность настроек (завернутых в SettingsDefinition). В полной конфигурации сборки использование выглядит следующим образом:
... lazy val proj = Project(...) .settings( addArtifact(...).settings : _* ) ...