Zugriff auf SBT-Einstellungen im aktuellen Bereich

8

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?

    
user2502025 26.03.2014, 15:11
quelle

2 Antworten

8

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:

%Vor%

Damit definiere ich assembly , packageScala und packageDependency Aufgaben.

%Vor%

Bisher ist baseAssemblySettings konfigurationsneutral.

Wenn ich es in Konfigurationen wie Compile und Test eingrenzen wollte, würde ich inConfig(conf)(settings) wie folgt aufrufen:

%Vor%

Jetzt haben Sie mehrere Aufgabengraphen in mehreren Konfigurationen.

    
Eugene Yokota 29.03.2014 21:41
quelle
5

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.

%Vor%

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).

    
Jacek Laskowski 26.03.2014 20:29
quelle

Tags und Links