Próbuję uruchomić aplikację Java z wiersza poleceń za pośrednictwem Gradle w ramach szybkiego testu integracji. Przenoszę moje skrypty budowania z Mavena, gdzie można to łatwo zrobić za pośrednictwem exec-maven-plugin
. Moje dwa duże wymagania to:
- Możliwość przekazywania właściwości systemowych do wykonywalnego kodu Java
- Możliwość przekazywania argumentów wiersza poleceń do wykonywalnego kodu Java
Zwróć uwagę, że nie próbuję odczytać tych właściwości w skrypcie kompilacji, próbuję je odczytać w programie Java, który ten skrypt buduje i wykonuje.
Znalazłem dwa inne stanowiska, tak aby adres Java wykonanie programu przez Gradle: jeden z odpowiedzią, że zwolennicy używając apply plugin: "application"
w pliku kompilacji i gradle run
w wierszu polecenia , a inna z odpowiedzi promując takie podejście, jak również korzystania task execute(type:JavaExec)
z pliku kompilacji i gradle execute
u wiersz poleceń . Próbowałem obu podejść i nie udało mi się.
Mam dwa problemy:
(1) Nie mogę pobrać pliku wykonywalnego Java do odczytu właściwości systemu
Czy to robię:
build.gradle :
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
Wiersz poleceń :
gradle run -Dmyproperty=myvalue
Albo to:
build.gradle :
task execute (type:JavaExec) {
main = "com.mycompany.MyMain"
classpath = sourceSets.main.runtimeClasspath
}
Wiersz poleceń :
gradle execute -Dmyproperty=myvalue
W obu przypadkach myproperty
nie przechodzi. Kod rozpoczynający się od MyMain.main (...)
odczytuje myproperty
właściwość systemową jako null / brakującą.
(2) Nie mogę przekazać argumentów wiersza poleceń
Jest to prawdopodobnie związane z pierwszym problemem. Na exec-maven-plugin
przykład same argumenty wiersza poleceń były przekazywane przez właściwość systemową. Czy tak jest w przypadku Gradle, czy jest inny sposób przekazywania argumentów wiersza poleceń?
Jak uzyskać dostęp do tych zmiennych? Czy lepiej jest użyć apply plugin: 'application'
lub task execute (type:JavaExec)
?