Wie überspringt SBT das Cross-Compile für ein bestimmtes Unterprojekt?

9

Ich bin auf ein paar Fälle mit SBT gestoßen, bei denen ich ratlos bin. Gibt es eine Möglichkeit, SBT zu sagen, ein Teilprojekt für bestimmte Scala-Versionen komplett zu überspringen, wenn Sie Cross-Compiling durchführen?

Hier sind zwei Beispiele, wo dies nützlich wäre.

1) Ein Build mit drei Projekten A, B und C. Sowohl A als auch B sind Skalaprojekte und haben 'scalaVersions ++ = Seq ("2.11.2", "2.10.4") in ihren Einstellungen. Projekt C ist ein reines Java-Artefakt, und daher habe ich die Scala-Bibliotheken von ihren Abhängigkeiten ausgeschlossen. Ich möchte, dass A und B von C abhängen, aber im Idealfall möchte ich C nur einmal bauen. Wenn ich das Standardverhalten verwende und "+ publish" aus dem Root-Aggregator-Projekt mache, erhalte ich zwei Kopien von C-1.0.0.jar, und SBT versucht, sie zweimal zu veröffentlichen, was natürlich ein No-No für ein ist Maven Repository.

2) Ein Build mit mehreren Scala-Projekten, aber ein Projekt sollte nur mit einer einzigen Scala-Version erstellt werden. Ich habe versucht, 'scalaVersions' in den Einstellungen für dieses Projekt zu definieren, um nur eine Version zu speichern, wo die anderen Projekte zwei haben, aber wieder "+ publish" von einem Root-Aggregator ignoriert dies und kompiliert es immer noch zweimal, zum zweiten Mal fehlgeschlagen, da Abhängigkeiten für diese Scala-Version nicht verfügbar sind. Dieses Projekt ist ein Blattknoten in der Abhängigkeitsgrafik, also ist es eine absolut feine Sache, die man logisch tun möchte.

Für Fall Nr. 2 habe ich darüber nachgedacht, die Source-Verzeichnisse für die "schlechte" scala-Version auf / dev / null oder etwas Ähnliches zu setzen, aber das führt immer noch zum Build und erzeugt ein leeres Artefakt. Ich weiß, ich könnte wahrscheinlich reingehen und alle relevanten Schlüssel finden und etwas wie

machen %Vor%

und dann jagen alle anderen verwandten Einstellungen / Aufgaben (kompilieren, kompilieren in Test, Test in Test, PaketBin, etc) aber das scheint ziemlich hack-ish. Gibt es irgendwo eine 'Überspringen'-Einstellung?

    
dpratt 31.08.2014, 21:37
quelle

2 Antworten

5

Ich schrieb sbt-doge , um die Aufgabenaggregation in Teilprojekten unter Berücksichtigung ihrer crossScalaVersions zu behandeln. Für Java-Projekte benötigen Sie möglicherweise einen Dummy-Eintrag crossScalaVersion .

    
Eugene Yokota 09.01.2015 11:56
quelle
1

Mit dem Plugin sbt-doge kann in jedem Unterprojekt eine crossScalaVersion Einstellung angegeben werden.

Fügen Sie zuerst die Zeile addSbtPlugin("com.eed3si9n" % "sbt-doge" % "0.1.5") zu Ihrem projects/plugins.sbt hinzu.

Um die lächerliche Doge-Syntax zu vermeiden ("so compile", wirklich?) müssen Sie enablePlugins(CrossPerProjectPlugin) in Ihrem Root-Projekt haben. Damit können Sie vor Ihren sbt-Befehlen ein Pluszeichen hinzufügen, das die Cross-Build-Einstellungen berücksichtigt. Einfach so: + compile .

    
willena 08.02.2016 16:48
quelle

Tags und Links