Ich versuche, ein Argument von der Befehlszeile an eine Java-Klasse zu übergeben. Ich bin diesem Beitrag gefolgt: http://gradle.1045684.n5.nabble.com/Gradle-application-plugin-question-td5539555.html, aber der Code funktioniert bei mir nicht (vielleicht ist er nicht für JavaExec gedacht?). Folgendes habe ich versucht:
task listTests(type:JavaExec){
main = "util.TestGroupScanner"
classpath = sourceSets.util.runtimeClasspath
// this works...
args 'demo'
/*
// this does not work!
if (project.hasProperty("group")){
args group
}
*/
}
Die Ausgabe des obigen fest codierten Args-Werts lautet:
C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle>g listTests
:compileUtilJava UP-TO-DATE
:processUtilResources UP-TO-DATE
:utilClasses UP-TO-DATE
:listTests
Received argument: demo
BUILD SUCCESSFUL
Total time: 13.422 secs
Sobald ich jedoch den Code so ändere, dass der Abschnitt hasProperty verwendet wird, und "demo" als Argument in der Befehlszeile übergebe, erhalte ich eine NullPointerException:
C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle>g listTests -Pgroup=demo -s
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle\build.gradle' line:25
* What went wrong:
A problem occurred evaluating root project 'testgradle'.
> java.lang.NullPointerException (no error message)
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project
'testgradle'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
at org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38)
Unter http://gradle.1045684.n5.nabble.com/file/n5709919/testgradle.zip steht ein einfaches Testprojekt zur Verfügung , das das Problem veranschaulicht.
Dies verwendet Gradle 1.0-rc-3. Der NullPointer stammt aus dieser Codezeile:
args group
Ich habe vor der Aufgabendefinition die folgende Zuordnung hinzugefügt, aber das Ergebnis hat sich nicht geändert:
group = hasProperty('group') ? group : 'nosuchgroup'
Alle Hinweise, wie Befehlszeilenargumente an gradle übergeben werden können, werden geschätzt.
Antworten:
project.group
ist eine vordefinierte Eigenschaft. Mit-P
können Sie nur Projekteigenschaften festlegen, die nicht vordefiniert sind. Alternativ können Sie Java-Systemeigenschaften festlegen (-D
).quelle
Aufbauend auf der Antwort von Peter N ist dies ein Beispiel für das Hinzufügen von (optionalen) benutzerdefinierten Argumenten, die für eine JavaExec-Aufgabe an Java main übergeben werden sollen (da Sie die Eigenschaft 'args' aus dem von ihm genannten Grund nicht manuell festlegen können).
Fügen Sie dies der Aufgabe hinzu:
... und laufen Sie so über die Kommandozeile
quelle
gradle run -Purl='localhost', -Pport='8080', -Pusername='admin'
Wie würde mein Code in build.gradle aussehen?Mein Programm mit zwei Argumenten, args [0] und args [1]:
mein build.gradle
meine Terminal-Eingabeaufforderung:
quelle
Ab Gradle 4.9 versteht das Anwendungs-Plugin die
--args
Option, sodass das Übergeben der Argumente so einfach ist wie:build.gradle
src / main / java / my / App.java
Bash
quelle
Es ist möglich, benutzerdefinierte Befehlszeilenoptionen in Gradle zu verwenden, um Folgendes zu erhalten:
Benutzerdefinierte Befehlszeilenoptionen in Gradle sind jedoch eine Inkubationsfunktion .
Java-Lösung
Befolgen Sie die Anweisungen hier, um so etwas zu erhalten :
Dann registrieren Sie es:
Jetzt können Sie tun:
Ausgabe:
Kotlin-Lösung
Registrieren Sie dann die Aufgabe mit:
quelle
Wenn Sie ein Argument überprüfen und festlegen müssen, sieht Ihre
build.gradle
Datei folgendermaßen aus:Und der Beispielbefehl in Windows:
quelle
Ich habe einen Code geschrieben, der die Befehlszeilenargumente in das von gradle erwartete Format bringt.
meine aufgabe sieht so aus:
Um die Argumente über die Befehlszeile zu übergeben, führen Sie Folgendes aus:
quelle
Hier gibt es ein gutes Beispiel:
https://kb.novaordis.com/index.php/Gradle_Pass_Configuration_on_Command_Line
Welche Details können Sie Parameter übergeben und dann einen Standard in einer ext-Variablen wie folgt angeben:
und dann in Gradle verweisen als:
Und dann können Sie es überall in Ihrem Build-Skript als Kurs referenzieren, wo immer Sie es referenzieren können
project.ext.color
Weitere Tipps hier: https://kb.novaordis.com/index.php/Gradle_Variables_and_Properties
quelle
Übergeben Sie eine URL über die Befehlszeile. Behalten Sie Ihre URL wie folgt in der App-Gradle-Datei resValue "string", "url", CommonUrl
und geben Sie einen Parameter in gradle.properties-Dateien wie folgt an CommonUrl = "Geben Sie Ihre URL hier ein oder sind Sie möglicherweise leer"
und übergeben Sie einen Befehl wie folgt an die Befehlszeile gradle assembleRelease -Pcommanurl = Geben Sie hier Ihre URL ein
quelle