Ich bin in scala und SBT mit sbt-assembly Plugin codiert. Mein Projekt hat viele externe Bibliotheken und daher benötigt sbt-assembly viel Zeit, um die JAR-Datei zu packen. Ich würde gerne eine separate Jar-Dateien für meinen Code und für die Abhängigkeiten haben. Daher könnte ich einfach nur meinen Code neu kompilieren und neu packen. Wie macht man das?sbt-assembly: wie man Abhängigkeiten jar mit Hauptglas verbindet?
Fortschritt bisher:
Die folgenden Befehle in der build.sbt
verhindert sbt-Baugruppe von der Verpackung der Bibliotheken:
assembleArtifact in packageScala := false
assembleArtifact in packageDependency := false
Dann getrennte Gläser können gebaut werden Passing folgende Befehle: assembly
, assembly-package-scala
und assembly-package-dependency
. Sie stellen drei Gläser her: eines mit meinem Programm, eines mit Scalabibliotheken und eines mit allen Abhängigkeiten.
Die JAR-Datei ist jedoch nicht mehr ausführbar, da die Abhängigkeiten in der separaten JAR-Datei nicht angezeigt werden. Ich denke, ich muss einen Klassenpfad zu Assembly-sbt hinzufügen, aber ich bin nicht sicher, wie das geht. Bitte helfen Sie (detaillierte Kommentare sind willkommen, da ich neu bei SBT bin). Vielen Dank!
Es funktioniert! und es ist schnell: Die Zeit wird von etwa 40 Sekunden auf wenige Sekunden reduziert. Technischer Hinweis: Ich musste auch "scala-library-2.10.2-assembly.jar" hinzufügen, da der scala repl ansonsten instabil war. Ich könnte es kompilieren mit sbt 0.12.4 und sbt-assembly 0.9.0. – Karolis
Gibt es eine Möglichkeit, diese Klassenreferenz in die JAR-Hauptdatei zu packen? Es wäre also möglich, jar auszuführen, indem Sie darauf klicken. – Karolis
[sbt-onejar] (https://github.com/sbt/sbt-onejar) kann ein Jar erstellen, das andere Jars und Pakete schneller enthält. Aber ich höre, dass die sbt-Assembly schneller startet, weil vermutlich ein einzelnes Jar benötigt, um es im Handumdrehen zu entpacken. sbt-assembly 0.9.0 speichert Lib-Unzips, so dass Sie sie nicht teilen müssen. –