2017-02-10 3 views
2

Ich habe Beinahe-Varianten dieser Frage gesehen, aber nicht mit Antworten, die alle nützlichen Informationen enthalten.Erstellen mehrerer Artefakte mit SBT

Mit sbt 0.13.13 und sbt-Montage 0.14.3, und ein Multi-Projekt build.sbt basierend auf http://www.scala-sbt.org/0.13/docs/Multi-Project.html wie folgt aus:

lazy val commonSettings = Seq(
    version := "2.3.0", 
    scalaVersion := "2.10.6" 
) 

lazy val config_jar = (project in file(".")). 
    settings(commonSettings: _*). 
    settings(
    name := "myapp-config", 
    test in assembly := {}, 
    assemblyJarName in assembly := "myapp-config.jar", 
    includeFilter in Compile := "myapp.conf" 
) 

lazy val build_jar = (project in file(".")). 
    settings(commonSettings: _*). 
    settings(
    name := "myapp", 
    excludeFilter in Compile := "myapp.conf", 
    libraryDependencies += ... 
) 

Ist das genug Konfiguration der Lage sein, den Bau von zwei getrennten Gläser ? Was genau sind die vollständigen sbt Befehle, um jede oder beide von der Kommandozeile aus zu erstellen? Der Befehl sbt projects zeigt nur build_jar, also fehlt etwas.

Antwort

2

Ein paar Kommentare:

  • Ihre Projekte müssen verschiedene Wege zeigen. Derzeit zeigen beide auf das Stammverzeichnis (file(".")).

  • Die Baugruppe wird für beide Projekte verfügbar sein, so dass Sie den Befehl assembly von jedem aufrufen können.

  • Warum Scala 2.10 verwenden? Zumindest (wenn Sie sagen auf gemischten Scala/Java-Projekt und Stack auf Java 7), verwenden Sie Scala 2.11.8.

  • Wenn Sie möchten, dass ein Projekt sie alle regelt, müssen Sie ein Aggregationsprojekt haben. Aufruf von assembly von root wird assembly in jedem der beiden anderen Projekte (und damit Ihre zwei Gläser).

So würde ich schreiben:

lazy val commonSettings = Seq(
    version := "2.3.0", 
    scalaVersion := "2.10.6" 
) 

lazy val root = (project in file(".")).aggregate(config_jar, build_jar) 

lazy val config_jar = (project in file("config")). 
    settings(commonSettings: _*). 
    settings(
    name := "myapp-config", 
    test in assembly := {}, 
    assemblyJarName in assembly := "myapp-config.jar", 
    includeFilter in Compile := "myapp.conf" 
) 

lazy val build_jar = (project in file("build")). 
    dependsOn(config_jar). 
    settings(commonSettings: _*). 
    settings(
    name := "myapp", 
    assemblyMergeStrategy in assembly := { file => 
     if(file.startsWith("config\\")) MergeStrategy.discard else MergeStrategy.defaultMergeStrategy(file) 
    }, 
    libraryDependencies += ... 
) 
+0

Scala 2.10 - ich die neueste und größte verwenden möchten. Dieser Build ist für eine Spark App, die auf Azure ausgeführt wird. So weit ich sagen konnte, ist ihre Wolke auf Spark 1.6.3, Scala 2.10 beschränkt. Es ist auf meiner Liste, um wenn möglich zu aktualisieren. –

+0

Das Projekt selbst ist derzeit ein Projekt. Ich hatte gehofft, einen Weg zu finden, zwei Artefakte aus dem bestehenden Einzelprojekt zu bauen. Ich habe nicht untersucht, ob ich es in zwei Projekten brechen könnte, aber wenn das der einzige Weg ist, das zu tun. –

+0

Ich dachte, du könntest einen Spark haben und blieb in 2.10. Was die 2 Teilprojekte angeht, denke ich, dass das die beste Lösung für das ist, was Sie tun müssen. – marios

Verwandte Themen