the run plugin implicitly applying applies application also gradle

run - Cómo usar la salida exec() en gradle



gradle run task (3)

Esta post describe cómo analizar el resultado de una invocación de Exec . A continuación encontrará dos tareas que ejecutan sus comandos.

task setWhoamiProperty { doLast { new ByteArrayOutputStream().withStream { os -> def result = exec { executable = ''whoami'' standardOutput = os } ext.whoami = os.toString() } } } task setHostnameProperty { doLast { new ByteArrayOutputStream().withStream { os -> def result = exec { executable = ''hostname'' standardOutput = os } ext.hostname = os.toString() } } } task printBuildInfo { dependsOn setWhoamiProperty, setHostnameProperty doLast { println whoami println hostname } }

De hecho, hay una manera más fácil de obtener esta información sin tener que invocar un comando de shell.

Usuario actualmente conectado: System.getProperty(''user.name'')

Nombre de host: InetAddress.getLocalHost().getHostName()

Estoy intentando implementar una tarea gradle para crear dinámicamente un archivo buildsignature.properties a partir de una serie de valores de variables de entorno y ejecuciones de shell. Lo tengo funcionando principalmente, pero parece que no puedo obtener el resultado de los comandos de la shell. Aquí está mi tarea ...

task generateBuildSignature << { ext.whoami = exec() { executable = "whoami" } ext.hostname = exec() { executable = "hostname" } ext.buildTag = System.env.BUILD_TAG ?: "dev" ant.propertyfile( file: "${buildDir}/buildsignature.properties", comment: "This file is automatically generated - DO NOT EDIT!" ) { entry( key: "version", value: "${project.version}" ) entry( key: "buildTimestamp", value: "${new Date().format(''yyyy-MM-dd HH:mm:ss z'')}" ) entry( key: "buildUser", value: "${ext.whoami}" ) entry( key: "buildSystem", value: "${ext.hostname}" ) entry( key: "buildTag", value: "$ext.buildTag" ) } }

Pero el campo de propiedades resultante no obtiene los resultados deseados para buildUser y buildSystem.

#This file is automatically generated - DO NOT EDIT! #Mon, 18 Jun 2012 18:14:14 -0700 version=1.1.0 buildTimestamp=2012-06-18 18/:14/:14 PDT buildUser=org.gradle.process.internal.DefaultExecHandle$ExecResultImpl@2e6a54f9 buildSystem=org.gradle.process.internal.DefaultExecHandle$ExecResultImpl@46f0bf3d buildTag=dev

¿Cómo obtengo buildUser y buildSystem para que coincida con el resultado del correspondiente ejecutivo en lugar de algún ExecResultImpl toString predeterminado? Esto realmente no puede ser tan difícil, ¿verdad?


Esta es mi sintaxis preferida para obtener la stdout del ejecutivo:

def stdout = new ByteArrayOutputStream() exec{ commandLine "whoami" standardOutput = stdout; } println "Output:/n$stdout";

Se encuentra aquí: http://gradle.1045684.n5.nabble.com/external-process-execution-td1431883.html (Tenga en cuenta que la página tiene un error tipográfico y menciona ByteArrayInputStream en lugar de ByteArrayOutputStream)


Parafraseado de los documentos de Gradle para Exec :

task execSomething { exec { workingDir ''/some/dir'' commandLine ''/some/command'', ''arg'' ... //store the output instead of printing to the console: standardOutput = new ByteArrayOutputStream() //extension method execSomething.output() can be used to obtain the output: ext.output = { return standardOutput.toString() } } }