Estoy intentando ejecutar una aplicación Java de línea de comandos a través de Gradle como parte de una prueba de integración rápida. Estoy portando mis scripts de compilación desde Maven, donde esto se hizo fácilmente a través de exec-maven-plugin
. Mis dos grandes requisitos son:
- Ser capaz de pasar propiedades del sistema al código ejecutable de Java.
- Ser capaz de pasar argumentos de línea de comandos al código ejecutable de Java
Tenga en cuenta que no estoy tratando de leer estas propiedades en el script de compilación, estoy tratando de leerlas en el programa Java que el script construye y ejecuta.
Encontré otras dos publicaciones SO que abordan la ejecución del programa Java a través de Gradle: una con una respuesta que aboga por el uso apply plugin: "application"
en el archivo de compilación y gradle run
en la línea de comando , y otra con respuestas que abogan por ese enfoque, así como task execute(type:JavaExec)
en el archivo de compilación y gradle execute
en el línea de comando . He probado ambos enfoques y no he tenido éxito.
Tengo dos problemas:
(1) No puedo hacer que el ejecutable de Java lea las propiedades del sistema
Si hago esto:
build.gradle :
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
Línea de comando :
gradle run -Dmyproperty=myvalue
O esto:
build.gradle :
task execute (type:JavaExec) {
main = "com.mycompany.MyMain"
classpath = sourceSets.main.runtimeClasspath
}
Línea de comando :
gradle execute -Dmyproperty=myvalue
En cualquier caso, myproperty
no lo logra. El código que comienza a ejecutarse MyMain.main (...)
lee la myproperty
propiedad del sistema como nulo / perdido.
(2) No puedo pasar argumentos de línea de comando
Probablemente esto esté relacionado con el primer problema. En exec-maven-plugin
, por ejemplo, los argumentos de la línea de comandos se pasaban a través de una propiedad del sistema. ¿Es ese el caso de Gradle o hay otra forma de pasar argumentos de línea de comando?
¿Cómo hago pasar estas variables? Además, ¿es mejor usar apply plugin: 'application'
o task execute (type:JavaExec)
?