Ausgabe
Ich möchte eine benutzerdefinierte runLocal
Aufgabe erstellen, die die sbt- run
Aufgabe mit geänderter unmanagedClasspath
.
Ich möchte, dass die unmanagedClasspath
Änderung nur während der Ausführung sichtbar/dauerhaft runLocal
ist, nicht run
.
Was ich ausprobiert habe build.sbt
:
Runtime / unmanagedClasspath ++= Seq(new java.io.File("src/main/my_resources")).classpath
val runLocal = taskKey[Unit]("Run app with my config")
runLocal := {
(Runtime / run).toTask("").value
}
Das obige funktioniert, aber das Problem ist, dass die Änderung von unmanagedClasspath
“global” ist und sich auf jede Aufgabe auswirkt, die diesen Wert verwendet.
Wie kann ich runLocal
mit geänderten ausführen unmanagedClasspath
, die außerhalb dieser Aufgabe nicht sichtbar sind?
Lösung
Was ich am Ende getan habe, ist die Verwendung einer Command
.
Befehle haben Zugriff auf den Status und können ihn ändern.
val runLocal = Command.command("runLocal") { state =>
val extracted = Project.extract(state)
val localConfigClasspath = Seq(new java.io.File("src/main/my_resources")).classpath
val newState = extracted.appendWithoutSession(Seq(Runtime / unmanagedClasspath ++= localConfigClasspath), state)
Project.extract(newState).runInputTask(Runtime / run, "", newState)._1
}
Auf diese Weise wird die Konfiguration nur während der Ausführung geändert, sbt runLocal
ohne dass sbt run
.
Beantwortet von – jcz
Antwort geprüft von – Senaida (FixError Volunteer)