Angenommen, ich habe zwei Aufgaben, doStart
und doStop
, und ich möchte eine vorhandene Aufgabe (z. B. test
) in diesen Aufgaben umbrechen. Folgendes funktioniert nicht:Verpacken einer vorhandenen Aufgabe mit benutzerdefinierten Aufgaben
test := Def.sequential(doStart, test, doStop).value
Es schlägt zur Laufzeit mit einem Fehler über nicht aufgelöste Einstellschlüssel fehl. Ich denke, das ist eigentlich ganz natürlich ist, weil Def.sequential
in eine verschachtelte Sequenz von Def.taskDyn
erweitert, und da die test
Aufgabe in der Mitte Aufgabe verwiesen wird, sein „neuer“ Wert angefordert wird, aber in diesem Moment ist es offenbar nicht verfügbar:
test := Def.taskDyn {
doStart.value
Def.taskDyn {
test.value
doStop
}
}.value
Wenn ich führen eine vorübergehende Aufgabe und wickeln sie es statt test
:
val _testOriginal = taskKey[Unit]("Used for wrapping.")
_testOriginal := test.value
test := Def.sequential(doStart, _testOriginal, doStop)
dann nicht den Fehler, den ich bekomme, aber ich bekommen, was wie eine unendliche Schleife scheint da doStart
dann ausgeführt wird, aber SBT hängt unbegrenzt ohne das OriginalaufrufenAufgabe. Dies erscheint auch natürlich, weil _testOriginal
von dem aktuellen Wert test
, nicht der ursprünglichen abhängt.
Die einzige „Lösung“ ich jetzt sehen, ist meine eigene Aufgaben wie testWrapped
genannt einzuführen, testQuickWrapped
usw. und den Benutzer anweisen meiner bauen sie statt test
/testQuick
/etc zu verwenden., Aber ich wirklich don‘ Ich will es tun. Wie umgehe ich eine bestehende Aufgabe?
In der Tat scheint der 'dependsOn' Trick zu funktionieren, danke! Ist es möglich, das gleiche mit 'testQuick' /' testOnly' zu tun, die Input-Aufgaben sind? –