2016-11-16 1 views
1

Wenn sbt-assembly ein fat jar erstellt, werden alle Abhängigkeiten in den Hauptordner gestellt. Ich brauche ein Glas zu konstruieren, dieGeben Sie die jar-Struktur in der sbt-Baugruppe an

--domain

  • Domain Klassen

wie folgt aussieht - lib

  • Abhängigkeitsklassen

ist es möglich, dies mit sbt assembly zu tun, oder jedem anderen p lugin?

Antwort

1

Wenn Sie App JAR-Datei und Ihre dependecy JAR-Dateien, hier trennen wollen, ist die praktischste Methode i mit sbt gefunden;

erstellen Projekt/plugins.sbt Datei, wenn nicht folgende Zeile vorhanden ist und fügen:

addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.8.0") 

Nachdem Sie die Zeile Ihr Projekt aktualisieren. Hinweis: Die Plugin-Version könnte sich im Laufe der Zeit ändern.

Wenn sbt Refresh beendet Update Ihre build.sbt-Datei wie folgt:

lazy val MyApp = project.in(file(".")) 
    .settings(artifactName := {(
     sv: ScalaVersion, 
     module: ModuleID, 
     artifact: Artifact) => "MyApp.jar" 
    }) 
    .settings(packSettings) 

Dann laufen:

sbt pack 

Oder wenn Sie dieses Projekt für ein Kind zu tun, führen Sie dies:

sbt "project childproject" clean pack 

Dies wird schön trennen Sie Ihre wichtigsten JAR-Datei und Ihre abhängen ency Gläser.

Ihr App-Jar befindet sich im Ziel-Scala-Ordner.

Ihre Abhängigkeiten werden in target/pack/lib sein.

Auf diese Weise können Sie Ihre Abhängigkeiten einmal bereitstellen.

Und wann immer Sie Ihre App ändern, können Sie einfach Ihre App JAR-Datei bereitstellen.

Also in jeder Änderung müssen Sie nicht eine Uber JAR-Datei bereitstellen.

Auch in der Produktion, können Sie Ihre App wie laufen:

java -cp "MyApp.jar:dependency_jars_folder/*" com.myapp.App 
Verwandte Themen