Ich habe eine Multiprojekt-Build-Konfiguration in SBT, die aus zwei verschiedenen Modulen besteht, die nicht voneinander abhängig sind. Sie gehören (zufällig) zum selben Produkt.
Das Projektlayout ist wie folgt:
%Vor%project / Build.scala enthält allgemeine Einstellungen und sieht folgendermaßen aus:
%Vor%Die Root-Build-Datei build.sbt wird nur benötigt, um alle zusammenzufügen [Ich habe auch versucht, es zu entfernen .. aber dann werden die Teilprojekte nicht mehr kompiliert]:
%Vor%Und schließlich hier ist myProject_1 / build.sbt [Ich habe gerade meinProjekt_2 / build.sbt weggelassen, weil es sehr ähnlich ist und keinen zusätzlichen Wert für die Thema]:
%Vor% Das Projekt kompiliert erfolgreich ... aber wenn ich den Befehl sbt package
ausstelle, wird ein leeres jar im root-Zielverzeichnis erzeugt:
Vermisse ich etwas? Wie kann ich verhindern, dass SBT dieses leere und nutzlose Glas erzeugt?
Ich schlage einen Workaround mit der folgenden (Neu-) Definition von package
in build.sbt
vor:
wobei a
und b
(Unter) Module sind.
Da package
ein Schlüsselwort in Scala ist, müssen Anführungszeichen aufgelöst werden können.
Es muss auch vollständig qualifiziert sein, da package
von Keys._
und sbt._
importiert wird, die standardmäßig in .sbt
Build-Dateien enthalten sind.
Bitte beachten Sie auch, dass ich SBT 0.13.2-SNAPSHOT (aus den Quellen) verwende, also mit Vorsicht verwenden (ich bezweifle jedoch, dass es in irgendeiner Version von SBT 0.13 + ).
%Vor%Das ist lächerlich schwer zu erreichen. Die folgende Reihe von Optionen scheint das Ziel zu erreichen. Teilmengen dieser Optionen neigen dazu, Sie zu verbrennen, indem Sie das root jar über einige Ausführungspfade unterdrücken, aber nicht andere. Wenn Sie also die Mindestabdeckung finden möchten, stellen Sie sicher, dass weder 'sbt package' noch 'sbt publicLocal' den jar erzeugen. Es hat lange gedauert, bis ich diesen Satz gefunden habe, und ich bin nicht geneigt, weiter zu iterieren.
%Vor%sbt: seit 2008 einfache Dinge unmöglich machen.
Ich bin mir nicht ganz sicher über all die Implikationen, denn ich bin neu bei SBT, aber Folgendes scheint die Aufgabe zu erfüllen:
%Vor% Das Überschreiben der Verpackungsaufgaben erschien mir nicht richtig. Also habe ich inspect
(plus die Quelle, weil ich nicht wusste, worauf ich zuerst achten muss) gefunden, wo genau diese Mappings herkamen und diese Abhängigkeiten gefunden:
kompilieren: Paket - & gt; kompilieren: packageBin - & gt; kompilieren: packageBin :: packageConfiguration - & gt; kompilieren: packageBin :: Zuordnungen - & gt; compile: packageBin :: products (von compile: products bereitgestellt) - & gt; kompilieren: kompilieren
Ich weiß nicht, warum es so schwierig sein muss. Die meisten meiner Probleme kommen von dem Versuch, ein Multiprojekt aufzubauen.
Ich füge dem Projektstamm folgende Einstellungen hinzu:
%Vor%