Führen Sie eine SBT-Task mit Argumenten über die Befehlszeile aus

8

Ich möchte eine SBT-Aufgabe haben, die eine kommagetrennte Liste von Testklassen verwendet, die durch ihren vollständig qualifizierten Namen als Eingabe von der Befehlszeile angegeben werden. Jetzt, wo ich die Aufgabe mit hart-codierten Wert ausführen, aber ich möchte es von der Befehlszeile erhalten. Kann jemand mir helfen, eine solche Aufgabe zu schreiben?

%Vor%

So etwas,

%Vor%

Vielen Dank im Voraus.

    
Sarath 30.05.2014, 10:37
quelle

1 Antwort

10

Sie müssen einen Parser haben parsen Sie die Eingabe, die Sie der Aufgabe gegeben haben. Sobald Sie die Eingabe haben, können Sie (runMain in Compile).toTask und füttere die Eingabe mit der Aufgabe.

TL; DR; %Code%

%Vor%

Parser

Beginnen wir mit einem Parser. Der Parser muss ein Leerzeichen enthalten, gefolgt von den durch Komma getrennten Klassen.

Lassen Sie uns zuerst einen Parser definieren, der den vollständig qualifizierten Klassennamen analysiert:

%Vor%

Sobald wir den Parser haben, können wir ihn mit einem anderen Parser kombinieren. Wir müssen einen Parser erstellen, der kommagetrennte vollqualifizierte Klassennamen verwendet:

%Vor%

Der Operator build.sbt bedeutet, dass die Eingabe links davon verworfen wird. Der vom Parser zurückgegebene Wert ist ~> der vollständig qualifizierten Klassennamen.

Ausgehend von Ihrer Frage möchten Sie, dass Ihren Klassen das Präfix Seq[String] vorangestellt wird. Du könntest es später tun, aber um nur eine weitere Funktion von Parsern zu zeigen, mache ich es einfach hier.

Sie können eine Ausgabe eines Parsers verwenden und sie mit -s in eine andere Ausgabe konvertieren.

%Vor%

Okay, wir sind fast da.

Führen Sie InputTask mit Argumenten kombiniert mit einer statischen Zeichenfolge

aus

Wir können einen neuen Eingabe-Task-Schlüssel definieren. Ich wähle map , weil sonst kollidiert mit myRunTask , die bereits existiert.

Lassen Sie uns eine Methode definieren, die eine Folge von Klassen (bereits mit dem Präfix runTask ) als Argument verwendet und eine -s lpiepiora 31.05.2014 19:09

quelle