2016-01-19 7 views
9

Ich habe eine Java-und Groovy-Klassen, die von Großbuchstaben Task ausgeführt werden. Ich habe es geschafft, es funktioniert, aber ich mag es nicht, wie ich die Parameter in der Befehlszeile übergeben muss. Hier ist, wie ich es zur Zeit über die Kommandozeile tun: gradle runTask -Pmode"['doStuff','username','password']"
mein build.gradle Code, der diese Parameter nimmt wie folgt aussieht:Wie übergebe ich mehrere Parameter in der Befehlszeile, wenn ich eine Task ausführen soll?

if (project.hasProperty("mode")) { 
args Eval.me(mode)} 

und dann verwende ich meine Argumente/Parameter in meinem Java-Code wie folgt:

String action = args[0]; //"doStuff" 
String name = args[1]; .. //"username" 

ich frage mich, ist es eine Möglichkeit, die Parameter in einer besseren Art und Weise zu passieren, wie:

gradle runTask -Pmode=doStuff -Puser=username -Ppass=password 

und wie man sie in meinen Java-Klassen benutzt.

+0

Ich nehme diese Java-Klassen Teil eines Projekts Code sind, die von gradle ausgeführt wird, bin ich richtig ? Wie läuft Ihre Aufgabe? – AdamSkywalker

+0

@Adam Ja, du hast recht, meine Aufgabe lief sie mit javaexec und es läuft main() -Methode in einer der Java-Klassen – Tomas

+0

ok, ich verstand das Problem, warten Sie ein paar Minuten für eine Antwort) – AdamSkywalker

Antwort

9

JavaExec ist möglicherweise der Weg zu gehen. deklarieren Sie einfach eine Aufgabe und Projektparameter zu Java-Anwendung übergeben:

task myExecTask(type: JavaExec) { 
    classpath = sourceSets.main.runtimeClasspath 
    main = 'com.project.MyApplicationMainClass' 
    args project.getProperty('userName') + ' ' + project.getProperty('password'); 
} 

es ausführen zu können, schreiben Sie einfach gradle myExecTask -PuserName=john -Ppassword=secret

+0

Brilliant, arbeitete wie ein Charme und was genau Ich brauchte, danke, Sir! – Tomas

+0

irgendwelche Ideen dazu? Was, wenn ich dieselbe Aufgabe ausführen möchte, ohne einige der Eigenschaften zu erhalten, zB möchte ich die Aufgabe nur mit 'grdle myExecTask -Pmode = doStuff' und nicht 'grelle myExecTask -Pmode = doStuff -PuserName = john -Ppassword = ausführen Geheimnis ", wirft es mich und Fehler, der besagt, dass die Eigenschaften 'Benutzername' und 'Passwort' nicht gefunden wurden. – Tomas

+1

@Tomas Ja, Gradle löst ärgerliche Ausnahmen aus, wenn die Eigenschaft nicht vorhanden ist. Die einzige Möglichkeit, dies zu vermeiden, besteht darin, zuerst project.hasProperty ('name') aufzurufen, um zu prüfen, ob die Eigenschaft gesetzt wurde. – AdamSkywalker

Verwandte Themen