Prawo sposobem, aby to zrobić jest użycie jednego z SBT wtyczek do produkcji słoików. Przetestowałem zarówno one-jar i assembly i oba mają wsparcie dla wykluczania bibliotek z twojego słoika. Możesz dodać ustawienia do poszczególnych projektów, aby tylko niektóre z nich tworzyły słoiki.
Osobiście używam zestawu, ale jak wskazuje this post, napotkasz problemy, jeśli nakładasz nazwy plików.
Edit:
Dla przykładu powyżej chcesz dodać następujące importu na górze:
import sbtassembly.Plugin._
import AssemblyKeys._
Można by zmodyfikować projekt wyglądać następująco:
lazy val daemon = Project(
id = "Daemon",
base = file("Daemon"),
dependencies = Seq(protocol),
settings = assemblySettings
)
Musisz również dodać do swojego numeru project/plugins.sbt
(dla sbt .11):
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.7.3")
resolvers += Resolver.url("sbt-plugin-releases",
new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)
Jeśli zdecydujesz się pójść ze Zgromadzeniem, prawdopodobnie będziesz musiał usunąć zduplikowane pliki. Oto przykład kodu zespołu służącego do wykluczania zduplikowanych plików log4j.properties w projekcie o nazwie "nazwa projektu". Powinno to zostać dodane jako część sekwencji "ustawień" dla projektu. Zwróć uwagę, że instrukcja 2. kolekcji jest podstawową implementacją i jest wymagana.
excludedFiles in assembly := { (bases: Seq[File]) =>
bases.filterNot(_.getAbsolutePath.contains("projectName")) flatMap { base =>
//Exclude all log4j.properties from other peoples jars
((base * "*").get collect {
case f if f.getName.toLowerCase == "log4j.properties" => f
}) ++
//Exclude the license and manifest from the exploded jars
((base/"META-INF" * "*").get collect {
case f if f.getName.toLowerCase == "license" => f
case f if f.getName.toLowerCase == "manifest.mf" => f
})
}
}
Dzięki, że działa dobrze. Musiałem także dodać wtyczkę do mojego plugins.sbt - możesz dodać to w swojej odpowiedzi, aby pomóc także innym. Zamknę to pytanie jutro. Wydaje mi się, że jedyną rzeczą, której naprawdę potrzebowałem było dodać ustawienie mainClass: = Some ("com.example.Main") do mojego projektu, o ile samodzielnie zarządzam zależnościami/klasą. - To było dość ukryte w dokumentacji, a może po prostu jestem ślepy :-) – Arve