uso recibir programa por paso pasar parametros metodo los linea importancia ejercicios ejecutar con comandos java gradle arguments

recibir - Tarea Gradle: pasar argumentos a la aplicación Java



recibir parametros en java (7)

Desde Gradle 4.9, los argumentos de la línea de comandos se pueden pasar con --args. Por ejemplo, si desea iniciar la aplicación con argumentos de línea de comandos foo --bar , puede usar

gradle run --args ''foo --bar

Ver también

Tengo una aplicación Java que se ejecuta con una tarea gradle personalizada 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 ejecutar gradle run -h y no funciona.


Perdón por responder tan tarde.

Pensé que una respuesta similar a la de @xlm:

task run (type: JavaExec, dependsOn: classes){ if(project.hasProperty(''myargs'')){ args(myargs.split('','')) } description = "Secure algorythm testing" main = "main.Test" classpath = sourceSets.main.runtimeClasspath }

E invocar como:

gradle run -Pmyargs=-d,s


Por supuesto, las respuestas sobre todo hacen el trabajo, pero aún así me gustaría usar algo así como

gradle run path1 path2

bueno, esto no se puede hacer, pero ¿y si podemos:

gralde run --- path1 path2

Si crees que es más elegante, entonces puedes hacerlo, el truco es procesar la línea de comando y modificarla antes de que lo haga gradle, esto se puede hacer usando scripts de init.

El script de inicio a continuación:

  1. Procesar la línea de comando y eliminar --- y todos los demás argumentos que siguen a ''---''
  2. Agregar propiedad ''appArgs'' a gradle.ext

Entonces en tu tarea de ejecución (o JavaExec, Exec) puedes:

if (project.gradle.hasProperty("appArgs")) { List<String> appArgs = project.gradle.appArgs; args appArgs }

El guión de inicio es:

import org.gradle.api.invocation.Gradle Gradle aGradle = gradle StartParameter startParameter = aGradle.startParameter List tasks = startParameter.getTaskRequests(); List<String> appArgs = new ArrayList<>() tasks.forEach { List<String> args = it.getArgs(); Iterator<String> argsI = args.iterator(); while (argsI.hasNext()) { String arg = argsI.next(); // remove ''---'' and all that follow if (arg == "---") { argsI.remove(); while (argsI.hasNext()) { arg = argsI.next(); // and add it to appArgs appArgs.add(arg); argsI.remove(); } } } } aGradle.ext.appArgs = appArgs

Limitaciones

  1. Me vi obligado a usar ''---'' y no ''-''
  2. Tienes que agregar un script de inicio global

Si no te gusta el script de inicio global, puedes especificarlo en la línea de comando

gradle -I init.gradle run --- f:/temp/x.xml

O mejor, agrega un alias a tu caparazón:

gradleapp run --- f:/temp/x.xml



Si desea utilizar el mismo conjunto de argumentos todo el tiempo, lo siguiente es todo lo que necesita.

run { args = ["--myarg1", "--myarg2"] }


Tuve el mismo problema y logré resolverlo agregando lo siguiente a build.gradle :

run { if (project.hasProperty("appArgs")) { args Eval.me(appArgs) } }

Luego para ejecutar: gradle run -PappArgs="[''arg1'', ''args2'']"


args pasarlos como args a la tarea utilizando las propiedades del proyecto, algo así como:

args = [project.property(''h'')]

agregado a su definición de tarea (vea los documentos dsl )

Entonces puedes ejecutarlo como:

gradle -Ph run