Tengo una aplicación Java que se ejecuta con una tarea personalizada de gradle y la aplicación requiere algunos argumentos al ser invocada. Estos son:
programName ( string | -f filename | -d key | -h)
Options:
string Message to be used.
-d key Use default messages, key must be s[hort], m[edium] or l[ong].
-f filename Use specified file as input.
-h Help dialog.
La tarea de Gradle se ve así:
task run (type: JavaExec){
description = "Secure algorythm testing"
main = 'main.Test'
classpath = sourceSets.main.runtimeClasspath
}
He intentado correr gradle run -h
y no funciona.
Respuestas:
Desde Gradle 4.9, los argumentos de la línea de comando se pueden pasar con --args. Por ejemplo, si desea iniciar la aplicación con argumentos de línea de comando
foo --bar
, puede usarVer también Complemento de aplicación Gradle
Cómo actualizar Gradle wrapper
fuente
'foo --bar'
es confuso, ¿por qué no solo usarlo'foo bar'
?Gradle 4.9+
Esto supone que su
build.gradle
está configurado con el complemento de aplicación . Tubuild.gradle
deberías ser similar a esto:Pre-Gradle 4.9
Incluya lo siguiente en su
build.gradle
:Luego correr:
gradle run -PappArgs="['arg1', 'args2']"
fuente
gradle run --args 'arg1 arg2'
no funcionó para mí. Tenía que hacer:gradle run --args='arg1 arg2'
Perdón por responder tan tarde.
Calculé una respuesta similar a la de @xlm:
E invocar como:
fuente
Si desea utilizar el mismo conjunto de argumentos todo el tiempo, lo siguiente es todo lo que necesita.
fuente
id 'application'
complemento y esta fue la respuesta que necesitaba (funciona).Puede encontrar la solución en Problemas al pasar propiedades y parámetros del sistema al ejecutar la clase Java a través de Gradle . Ambos implican el uso de la
args
propiedad.También debe leer la diferencia entre pasar con
-D
o con-P
eso se explica en la documentación de Gradlefuente
Por supuesto, las respuestas sobre todo hacen el trabajo, pero aún así me gustaría usar algo como
bueno, esto no se puede hacer, pero ¿y si podemos:
Si crees que es más elegante, entonces puedes hacerlo, el truco es procesar la línea de comando y modificarla antes de que gradle lo haga, esto se puede hacer usando scripts de inicio
El guión de inicio a continuación:
Entonces, en su tarea de ejecución (o JavaExec, Exec) puede:
El guión de inicio es:
Limitaciones:
Si no le gusta el guión de inicio global, puede especificarlo en la línea de comando
O mejor agregue un alias a su shell:
fuente
argsI.remove()
Está teniendo el efecto deseado) Sugerencias.?Debe pasarlos
args
a la tarea utilizando las propiedades del proyecto, algo como:agregado a su definición de tarea (consulte los documentos de dsl )
Entonces puedes ejecutarlo como:
fuente