Próbuję przekazać argument z wiersza poleceń do klasy java. Śledziłem ten post: http://gradle.1045684.n5.nabble.com/Gradle-application-plugin-question-td5539555.html, ale kod nie działa dla mnie (może nie jest przeznaczony dla JavaExec?). Oto, czego próbowałem:
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
}
*/
}
Dane wyjściowe z powyższej zakodowanej na stałe wartości argumentów to:
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
Jednak po zmianie kodu, aby używał sekcji hasProperty i przekazaniu „demo” jako argumentu w wierszu poleceń, otrzymuję wyjątek 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)
Istnieje prosty projekt testowy dostępny pod adresem http://gradle.1045684.n5.nabble.com/file/n5709919/testgradle.zip, który ilustruje problem.
Używa Gradle 1.0-rc-3. NullPointer pochodzi z tego wiersza kodu:
args group
Dodałem następujące zadanie przed definicją zadania, ale nie zmieniło to wyniku:
group = hasProperty('group') ? group : 'nosuchgroup'
Wszelkie wskazówki dotyczące przekazywania argumentów wiersza poleceń do gradle są mile widziane.
Odpowiedzi:
project.group
jest predefiniowaną właściwością. Za pomocą-P
można ustawić tylko właściwości projektu, które nie są wstępnie zdefiniowane. Alternatywnie możesz ustawić właściwości systemowe Java (-D
).źródło
Opierając się na odpowiedzi Petera N., jest to przykład dodawania (opcjonalnych) argumentów określonych przez użytkownika, które mają być przekazane do pliku głównego Java dla zadania JavaExec (ponieważ nie można ustawić właściwości `` args '' ręcznie z powodów, które przytacza).
Dodaj to do zadania:
... i uruchom z linii poleceń w ten sposób
źródło
gradle run -Purl='localhost', -Pport='8080', -Pusername='admin'
jak powinien wyglądać mój kod w build.gradle?Mój program z dwoma argumentami, argumentami [0] i argumentami [1]:
mój build.gradle
mój terminal:
źródło
Od wersji Gradle 4.9 wtyczka aplikacji rozumie
--args
opcje, więc przekazywanie argumentów jest tak proste, jak:build.gradle
src / main / java / my / App.java
grzmotnąć
źródło
Możliwe jest wykorzystanie niestandardowych opcji wiersza poleceń w Gradle, aby uzyskać coś takiego:
Jednak niestandardowe opcje wiersza poleceń w Gradle są funkcją inkubacji .
Rozwiązanie Java
Aby skończyć z czymś takim, postępuj zgodnie z instrukcjami tutaj :
Następnie zarejestruj go:
Teraz możesz:
wynik:
Rozwiązanie Kotlin
następnie zarejestruj zadanie w:
źródło
Jeśli chcesz sprawdzić i ustawić jeden argument , Twój
build.gradle
plik wyglądałby tak:Oraz przykładowe polecenie w oknach:
źródło
Napisałem fragment kodu, który umieszcza argumenty wiersza poleceń w formacie, którego oczekuje gradle.
moje zadanie wygląda następująco:
Aby przekazać argumenty z wiersza poleceń, uruchom to:
źródło
Oto świetny przykład:
https://kb.novaordis.com/index.php/Gradle_Pass_Configuration_on_Command_Line
Jakie szczegóły można przekazać parametry, a następnie podać wartość domyślną w zmiennej rozszerzającej, na przykład:
a następnie odniesienie w Gradle jako:
A potem w dowolnym miejscu skryptu kompilacji możesz odwołać się do niego jako kursu, gdziekolwiek możesz odwołać się do niego jako
project.ext.color
Więcej wskazówek tutaj: https://kb.novaordis.com/index.php/Gradle_Variables_and_Properties
źródło
Przekaż adres URL z wiersza poleceń zachowaj swój adres URL w pliku gradle aplikacji w następujący sposób resValue "string", "url", CommonUrl
i podaj parametr w plikach gradle.properties w następujący sposób CommonUrl = "umieść tutaj swój adres URL lub może być pusty"
i przekaż polecenie do z wiersza poleceń w następujący sposób gradle assembleRelease -Pcommanurl = wpisz tutaj swój adres URL
źródło