Kein Artefakt für Root-Projekt mit Paket unter Multi-Projekt-Build in SBT

8

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:

%Vor%

Vermisse ich etwas? Wie kann ich verhindern, dass SBT dieses leere und nutzlose Glas erzeugt?

    
j3d 23.12.2013, 16:23
quelle

5 Antworten

6

Ich schlage einen Workaround mit der folgenden (Neu-) Definition von package in build.sbt vor:

%Vor%

wobei a und b (Unter) Module sind.

%Vor%

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.

%Vor%

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%     
Jacek Laskowski 23.02.2014, 09:22
quelle
10

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.

    
extempore 03.09.2014 21:14
quelle
1

Ich benutze die folgenden

%Vor%

Dies erzeugt immer noch das leere gepackte Glas, aber es wird es beim Veröffentlichen nicht exportieren.

    
0__ 23.12.2013 22:26
quelle
1

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.

    
Steiny 05.10.2015 00:48
quelle
0

Ich füge dem Projektstamm folgende Einstellungen hinzu:

%Vor%     
Jeffrey Aguilera 18.12.2016 00:16
quelle

Tags und Links