Ich versuche, einen Befehl mit Gradle mit der folgenden Aufgabe auszuführen:
%Vor%Wenn ich es ausführe, erhalte ich den folgenden Fehler:
%Vor%Und wenn meine Aufgabe so ist:
%Vor%Ich bekomme diesen Fehler:
%Vor%Können Sie mir sagen, wo ich bei diesen Ansätzen falsch liege?
Wenn keine der oben genannten Vorgehensweisen richtig ist, dann geben Sie bitte die Art und Weise an, wie Sie es wahrscheinlich mit einem Beispiel tun.
Ich glaube, du suchst das:
%Vor% Der Hauptunterschied ist sehr subtil - ich habe gerade zwei Zeichen gelöscht. Der <<
ist aus der Aufgabendefinition verschwunden. Der andere Unterschied ist, dass die commandLine
erwartet, dass die ausführbare Datei separat von den Argumenten an sie übergeben wird.
Ich habe die <<
wegen einer wichtigen Idee in Gradle entfernt: Build-Lifecycle . Es gibt Konfigurations- und Ausführungsphasen (das ist nicht alles, aber es ist genug, um dies zu erklären).
<<
ist wie doLast
zu sagen - es fügt den Abschluss, den Sie übergeben, an das Ende der Aktionen (die Ausführungsphase ) für diese Aufgabe an. Das bedeutet hier, es wird versuchen, den Befehl wie normal auszuführen (es ist schließlich ein Exec
-Objekt), und nur dann , sobald er ausgeführt wird, ruft er Ihren Block - den Block - auf Einstellung commandLine
. Also, wenn es ausgeführt wird, ist execCommand
wirklich null und würde sein, bis dein Block ausgeführt wurde. Dies ist das Herz Ihres Problems.
Ohne den <<
(auch bekannt als Linksverschiebung) wird derselbe Block während der Phase configuration ausgeführt. Also wird der Exec-Befehl gesetzt, bevor er ausgeführt wird, und es funktioniert.
Hier ist eine andere Lösung, die für den gleichen Fehler gut funktioniert, wenn Sie eine eigenständige Exec-Task haben, die Sie von der Befehlszeile ausführen möchten, aber nicht in Android Studio als Teil Ihres Builds ausgeführt werden soll.
Dies führt immer die Konfiguration von "myExecTask" aus, führt aber nur doMyExecTask aus, wenn es explizit über "grdle myExecTask"
ausgeführt wird %Vor%Tags und Links gradle build.gradle