Wie kann ich rufen Sie eine weitere Aufgabe aus meiner SBT Aufgabe?
Ich versuche zu nennen, die runTask
in meiner Aufgabe und als dieser funktionieren würde:
name := "hello"
version := "1.0"
scalaVersion := "2.10.2"
lazy val hello = taskKey[Unit]("executes hey")
lazy val helloTask = hello <<= runTask(fullClasspath, "sample.Hey" in run, runner in run)
Aber gut, es funktioniert nicht. Irgendwelche Ideen, wie ich dies tun könnte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Allgemeine Antwort:
Zur Beantwortung Ihrer Allgemeinen Frage, die Lösung ist, um Ihre Aufgabe hängt von der Aufgabe. Aufruf der Aufgabe direkt tun würde, ein Ende Lauf um die Abhängigkeit system, das parallel execution system, etc. Sie sind abhängig von, und rufen Sie die Aufgabe wie diese (in 0.13-Stil-syntax):
Beachten Sie, dass
otherTask
wird aufgerufen, bevormyTask
beginnt, anstatt an der Stelle in den Körper dermyTask
wo die Abhängigkeit erscheint; denn das ist, wie Abhängigkeiten arbeiten.Wenn Sie aus irgendeinem Grund finden es zu tun die "normalen" Art und Weise unangemessen oder inakzeptabel, Bedenken Sie, dass guter Stil in sbt ist die Trennung der Deklaration einer Aufgabe, von deren Umsetzung. Eine typische Aufgabe, die Umsetzung einfach Streckenposten Argumente und ruft dann eine Methode, die tatsächlich funktioniert. Wenn die Aufgabe, die Sie aufrufen wollen, ist implementiert, die Weg ist, dann wird eine Antwort auf die Frage "Wie rufe ich den task T?" ist "nicht; rufen Sie den gleichen code T nennt."
Spezifische Antwort:
Aber aus deinem Beispiel, sieht es für mich wie das problem, das Sie eigentlich lösen möchten, ist "Wie kann ich erstellen Sie eine benutzerdefinierte task ausführen, zusätzlich zu laufen?" Diese Frage beantwortet in der sbt FAQ; siehe http://www.scala-sbt.org/0.13.0/docs/faq.html. Die Antwort ist die Verwendung der convenience-Methoden
fullRunTask
undfullRunInputTask
.Übrigens, wenn man sich den source-code für diese Methoden, Sie werden sehen, dass Sie nicht eine Aufgabe, startet eine weitere Aufgabe, sondern nehmen Sie die "call den gleichen code" - Ansatz.
(run in Compile).value
innerhalb einer benutzerdefinierten Aufgabe machen, laufen gehen? In meinem Fall ich will nur eine benutzerdefinierte tasks zum ausführen derrun
Aufgabe, eine Abhängigkeit der Projekt ohne übergeordneterun
in keiner Weise.run
verhält, dann, dass gut klingt. (Ich glaube das sagte ich im ersten Teil meiner Antwort.)(compile in Compile in SubProject).value
funktioniert aber nicht(run in Compile in SubProject).value
. Vielleicht irgendwas besonderes anrun
es. Vielleicht sollte ich öffnen Sie eine neue Frage für Sie.