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.
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.
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.
Okay, wir sind fast da.
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
Tags und Links scala command-line sbt task scalatest