Ich habe ein Problem damit, das Konzept von scope in sbt zu verstehen. Ich möchte, dass eine Aufgabe in einem bestimmten Bereich ausgeführt wird und auf Bereichseinstellungen zugreifen kann, d. H.
build.sbt
%Vor%Ich würde Folgendes erwarten:
%Vor%Anstelle der tatsächlichen:
%Vor%Wie kann ich das in sbt tun? Ist das überhaupt möglich?
OP schrieb "Ich würde Folgendes erwarten:"
%Vor% Ohne tatsächlich psk
task in Test
configuration zu definieren, sucht sbt zuerst nach psk
task in Global
configuration, dann in der Reihenfolge configurations
des Projekts, das standardmäßig Seq(Compile, Runtime, Test, Provided, Optional)
ist .
Das folgende (und auch die Antwort von Jacek Laskowski) beschreibt, wie man Aufgaben ohne Code-Duplizierung in mehrere Bereiche fassen kann. Eine Einstellung kann in drei Achsen (Projekt, Konfiguration und Aufgabe) festgelegt werden. Der Projektteil kommt nicht so oft ins Spiel, deshalb besprechen wir Konfiguration und Aufgabe hier.
Es wird empfohlen, dass aufgabenspezifische Einstellungen für eine Aufgabe gelten, um die Wiederverwendung von Schlüsseln zu fördern. Zum Beispiel:
%Vor% In der obigen test
-Schlüssel ist auf assembly
task beschränkt, um Tests zu steuern, die vor dem Erstellen einer fetten JAR ausgeführt werden. Sie können eine "task-generator" -Methode definieren, die einen Schlüssel verwendet und ein Diagramm mit Einstellungen erstellt:
Damit definiere ich assembly
, packageScala
und packageDependency
Aufgaben.
Bisher ist baseAssemblySettings
konfigurationsneutral.
Wenn ich es in Konfigurationen wie Compile
und Test
eingrenzen wollte, würde ich inConfig(conf)(settings)
wie folgt aufrufen:
Jetzt haben Sie mehrere Aufgabengraphen in mehreren Konfigurationen.
Danke für die Frage! Ich hatte zuerst gedacht, ich würde die Antwort wissen und dann wurde mir klar, dass es nicht so einfach ist. Ich musste mich nach einer Lösung umsehen.
Ich benutze sbt 0.13.2-RC1 .
%Vor%Ich fand die Lösung in Mark Harrahs Antwort auf eine ähnliche Frage auf der sbt-Mailingliste , das auf die folgenden Änderungen in build.sbt :
hinausläuft %Vor% Wenn die Build-Datei geladen ist, wird sbt automatisch wissen, dass bei der Ausführung von psk
die Abhängigkeit name in Compile
ist, während test:psk
von name in Test
abhängt. Ziemlich clever.
Verwenden Sie inspect
, um tiefer zu graben. Es ist immer sehr nützlich zu wissen, wie es unter der Haube funktioniert (was nicht so schwer zu verstehen ist, wenn man mit richtigen Werkzeugen wie inspect
anfängt).
Tags und Links sbt