Gibt es eine Möglichkeit, sbt zu sagen, alle benötigten Bibliotheken (scala-library.jar) in das Hauptpaket zu packen, so dass es eigenständig ist? (Statisch?)Erstellen von Standalone-JAR mit Simple Build Tool
Antwort
Bearbeiten 2011:
Seitdem retronym (die eine answer in this page back in 2010 geschrieben), machte diese sbt-plugin "sbt-onejar", jetzt in seinem new address on GitHub, mit docs für SBT aktualisiert 0.12.
Pakete Ihr Projekt One-JAR™
onejar-sbt
verwendet, ist ein einfaches Build-Werkzeug-Plugin für eine ausführbare JAR-Aufbau enthält den gesamten Code und Abhängigkeiten als verschachtelte JAR-Dateien.
Derzeit wird One-JAR Version 0.9.7 verwendet. Dies ist im Lieferumfang des Plugins enthalten und muss nicht separat heruntergeladen werden.
Ursprüngliche Antwort:
Direkt, ist dies nicht möglich, ohne sbt erstreckt (ein custom action nach dem Modell der "package" sbt action).
GitHub mentions an assembly task, maßgeschneidert für den Einsatz an Landungsbrücken. Sie können es jedoch für Ihre Bedürfnisse anpassen.
Die code is pretty generic (von this post und Benutzer 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)
}
Es funktioniert. Aber sollte es nicht in SBT eingebaut werden? –
imho sollte es sein. Ich habe eine leicht modifizierte Version dieses AssemblyProjekts seit einigen Monaten erfolgreich verwendet. Es wird bei doppelten Dateien fehlschlagen (etwas, auf das Sie achten müssen, wenn Sie ein komplexes Projekt mit Unterprojekten haben), und wird mit dem letzten Build von Hibernate fehlschlagen (Hibernate enthält einige seltsame Zip-Einträge, die es Kummer verursachen). – Michael
Die URL zu sbt-onejar hat sich geändert: https://github.com/sbt/sbt-onejar (hat eine neue Version und Dokumentation für SBT aktualisiert 0.12) – akauppi
Es dauert ein bisschen Arbeit, aber Sie auch Proguard aus SBT erstellen einen eigenständigen JAR verwenden können.
Ich tat dies kürzlich in der SBT build for Scalala.
Proguard ist mächtig, aber wenn Sie eine Menge Gläser, müssen Sie manuell dynamisch aufgerufen jede Klasse oder Methode definieren - siehe http://proguard.sourceforge.net/index.html#/manual/limitations.html und siehe „Probleme zur Laufzeit“ http: // proguard .sourceforge.net/index.html #/manual/troubleshooting.html –
gerechte Strafe für außerhalb des Typ-System Schritt;) – retronym
https://github.com/ymasory/sbt-prototype verwendet [Proguard] (http: // proguard .sourceforge.net /) um ein ausführbares jar zu erstellen. Der Prototyp funktioniert einwandfrei, zumindest auf einer einfachen Anwendung. – user272735
Ausgehend von dem, was @retronym oben angeboten, baute ich eine simple example, die ein Stand-alone-Krug baut, der die Scala-Bibliotheken (d. Scala-Bibliothek.jar) mit Proguard mit sbt enthält. Danke, retronym.
Das einfachste Beispiel sbt-assembly
Verzeichnis erstellen Projekt in Ihrem home-Projekt dir mit Datei assembly.sbt einschließlich
addSbtPlugin ("com.eed3si9n" % "sbt-assembly" % „0,11 mit 0,2")
In Datei build.sbt
Import AssemblyKeys._ // fügen Sie am Anfang der Datei
assemblySettings
jarName + = "Mmyjarnameall.jar"
libraryDependencies ++ = Seq ("exmpleofmydependency% "mydep" %" 0.1")
mergeStrategy in der Montage < < = (mergeStrategy in der Montage) {(alt) =>
{
Fall s, wenn s.endsWith ("Klasse") => MergeStrategy.last
Fall s, wenn s.endsWith ("pom.xml") => MergeStrategy.last
Fall s, wenn s.endsWith ("pom.properties") => MergeStrategy.last
Fall x => alt (x)
}
}
Die einfachste Methode ist nur das Glas von der Kommandozeile zu erstellen. Wenn Sie nicht wissen, wie das geht, würde ich Ihnen wärmstens empfehlen, dies zu tun. Automatisierung ist nützlich, aber es ist viel besser, wenn Sie wissen, was die Automatisierung macht.
Der einfachste Weg, die Schaffung eines runnable jar zu automatisieren, ist in den Fenstern einen Bash-Skript oder Batch-Skript zu verwenden.
Die einfachste Art und Weise in sbt ist nur die Scala hinzuzufügen Bibliotheken, die Sie zu den Ressourcen-Verzeichnisse müssen:
unmanagedResourceDirectories in Compile := Seq(file("/sdat/bins/ScalaCurrent/lib/scalaClasses"))
So in meiner Umgebung ScalaCurrent ein Link auf die aktuelle Scala Bibliothek ist. 2.11.4 zum Zeitpunkt des Schreibens. Der entscheidende Punkt ist, dass ich die Scala-Bibliothek entpacke, sie aber in ein ScalaClasses-Verzeichnis lege. Jede extrahierte Bibliothek muss in ihr oberstes Verzeichnis gehen.
- 1. linux build system tool
- 2. Wie teile ich meinen lib-Ordner in Teilprojekten von Simple Build Tool
- 3. Wie kann ich ein mit Simple Build Tool erstelltes Paket ausführen?
- 4. Dojo Build Tool
- 5. Build Tool Evaluierungsbericht
- 6. Allzweck-Build-Tool mit guter Java-Unterstützung?
- 7. Dateien mit npm als Build-Tool verketten
- 8. Was ist Scalas Simple Build Tool (sbt) und warum wird es verwendet?
- 9. Build-Tool zum Erkennen von Autoboxing?
- 10. Waf (Build Tool): PHONY Ziele wie Make?
- 11. Erstellen Debug-Build von Autotools build Quelle
- 12. Wann wird ein Build-Tool verwendet?
- 13. Fehler beim Erstellen von Build mit Maven
- 14. Verwenden von Maven als Build-Tool für Weblogic 10.3
- 15. erstellen QVD Datei-Tool
- 16. Deployment/Build-Tool zwischen Ant und Chef
- 17. Welches Build-Tool soll gelehrt werden?
- 18. Clojure Kuchen Build-Tool funktioniert nicht richtig
- 19. Sammeln von Betriebssystem- und Tool-Versionsnummern für Build-Archivzwecke
- 20. Wie kann ich den Build-Prozess mit Maven Tool
- 21. Modernes Build-Tool geeignet für Visual Studio MSBuild
- 22. Wohin mit Java Simple Captcha Builder?
- 23. Best Practices für Java-fx-Anwendung Build-Tool für Linux
- 24. Registrierung von AutoMapper 4.2.0 mit Simple Injector
- 25. InstallShield-Projekt mit TFS-Build erstellen
- 26. Erstellen Sie War-Datei mit Build
- 27. Visual Studio XSD-Tool: Erstellen von Sammlungen anstelle von Arrays
- 28. Probleme beim Erstellen von Gradle Build
- 29. Build-Fehler mit GPU-Unterstützung beim Erstellen von Pip
- 30. WIX-Projekt mit Team Build erstellen
möglich Duplikat von [Wie ein sbt-Managed Anwendung Projekt ohne sbt laufen?] (Http://stackoverflow.com/questions/7195079/how-to-run-a-sbt-managed-application-project-without -sbt) –
Duplizieren von http://stackoverflow.com/q/7195079/1305344 und http://stackoverflow.com/q/7134993/1305344 –
http://blog.prabeeshk.com/blog/2014/04/ 01/a-Standalone-Spark-Anwendung-in-Scala/ –