Ich habe eine Java-Anwendung, die mit einer benutzerdefinierten Gradle-Aufgabe ausgeführt wird, und die Anwendung benötigt beim Aufrufen einige Argumente. Diese sind:
programName ( string | -f filename | -d key | -h)
Options:
string Message to be used.
-d key Use default messages, key must be s[hort], m[edium] or l[ong].
-f filename Use specified file as input.
-h Help dialog.
Gradle Aufgabe sieht aus wie:
task run (type: JavaExec){
description = "Secure algorythm testing"
main = 'main.Test'
classpath = sourceSets.main.runtimeClasspath
}
Ich habe versucht zu laufen gradle run -h
und es funktioniert nicht.
Antworten:
Seit Gradle 4.9 können die Befehlszeilenargumente mit --args übergeben werden. Wenn Sie die Anwendung beispielsweise mit Befehlszeilenargumenten starten möchten
foo --bar
, können Sie sie verwendenSiehe auch Gradle Application Plugin
So aktualisieren Sie Gradle Wrapper
quelle
'foo --bar'
ist verwirrend, warum nicht einfach verwenden'foo bar'
.Gradle 4.9+
Dies setzt voraus, dass Sie
build.gradle
mit dem Anwendungs-Plugin konfiguriert sind . Siebuild.gradle
sollten ungefähr so aussehen:Pre-Gradle 4.9
Nehmen Sie Folgendes in Ihre auf
build.gradle
:Dann laufen:
gradle run -PappArgs="['arg1', 'args2']"
quelle
gradle run --args 'arg1 arg2'
Hat bei mir nicht funktioniert. Ich musste tun:gradle run --args='arg1 arg2'
Tut mir leid, dass ich so spät geantwortet habe.
Ich fand eine Antwort ähnlich wie bei @xlm:
Und rufen Sie auf wie:
quelle
Wenn Sie immer die gleichen Argumente verwenden möchten, benötigen Sie nur Folgendes.
quelle
id 'application'
Plugin und dies war die Antwort, die ich brauchte (es funktioniert).Die Lösung finden Sie unter Probleme beim Übergeben von Systemeigenschaften und -parametern beim Ausführen der Java-Klasse über Gradle . Beide beinhalten die Nutzung der
args
ImmobilieAußerdem sollten Sie den Unterschied zwischen dem Bestehen mit
-D
oder mit-P
dem lesen, der in der Gradle-Dokumentation erläutert wirdquelle
Natürlich machen die Antworten vor allem den Job, aber trotzdem würde ich gerne so etwas verwenden
Nun, das geht nicht, aber was ist, wenn wir können:
Wenn Sie der Meinung sind, dass es eleganter ist, können Sie es tun. Der Trick besteht darin, die Befehlszeile zu verarbeiten und zu ändern, bevor gradle dies tut. Dies kann mithilfe von Init-Skripten erfolgen
Das Init-Skript unten:
In Ihrer Ausführungsaufgabe (oder JavaExec, Exec) können Sie also:
Das Init-Skript lautet:
Einschränkungen:
Wenn Ihnen das globale Init-Skript nicht gefällt, können Sie es in der Befehlszeile angeben
Oder fügen Sie Ihrer Shell besser einen Alias hinzu:
quelle
argsI.remove()
den gewünschten Effekt hat). Vorschläge?Sie müssen sie
args
mithilfe von Projekteigenschaften an die Aufgabe übergeben, z. B.:zu Ihrer Aufgabendefinition hinzugefügt (siehe dsl-Dokumente )
Dann können Sie es ausführen als:
quelle