2012-07-10 28 views
6

Llamo a ant.signjar desde un script de gradle. ¿Cómo puedo capturar su salida? No logré que se administrara fácilmente para elevar la salida de INFO a otro nivel, ni para interceptar o envolver la salida a advertencias de error a nivel de ADVERTENCIA. Actualmente, el signjar recuerda que el certificado caducará pronto, pero esto no se muestra en el nivel WARN, que no es tan bueno.Cómo interceptar o elevar los mensajes de registro cuando llamo a una tarea Ant desde Gradle

+0

Como un lado-nota: Gradle proporciona la [plugin de la firma] (http://gradle.org/docs/current/userguide/signing_plugin.html) para la firma artefactos, por lo que no necesita usar la tarea Ant. –

+0

@BenjaminMuschko Conozco el complemento de firma, pero la documentación dice que solo sirve para generar firmas PGP de archivos, p. para subir a Maven Central. ¿Cómo firmo un archivo JAR con el complemento de firma? – Vampire

Respuesta

2

Supongo que la tarea Ant está utilizando el marco de registro de Ant, y no solo imprimiendo a la salida estándar. En ese caso, ¿has probado lo siguiente?

task taskThatCallsAntTask { 
    logging.level = LogLevel.INFO 
} 

Cuando se configura de esta manera, el nivel de registro se cambiará a INFO mientras que la tarea se está ejecutando (y volvió de nuevo después), sin importar el nivel de registro se establece cuando se invoca Gradle. Tenga en cuenta que no puede elevar el nivel de registro de un evento de registro Ant; depende de la tarea Ant a qué nivel se registra.

+0

Eso funciona, pero luego da demasiado registro ya que también imprime otros mensajes que no son advertencias. Realmente preferiría si pudiera interceptar la salida y elevarla en un alcance por línea. Alguna idea sobre eso? – Vampire

+0

Publique una solicitud de función (* idea *) en http://forums.gradle.org. –

+0

Lo hizo en http://forums.gradle.org/gradle/topics/interception_of_ant_task_output, gracias – Vampire

0

Aquí hay un método que captura el resultado de una tarea Ant registrando un BuildListener personalizado durante la duración de la llamada. uso

def captureAntOutput(ant, Closure command) { 
    def buffer = new ByteArrayOutputStream() 
    def captureStream = new PrintStream(buffer, true, "UTF-8") 
    def listener = new org.apache.tools.ant.DefaultLogger(
      errorPrintStream: captureStream, 
      outputPrintStream: captureStream, 
      messageOutputLevel: org.apache.tools.ant.Project.MSG_INFO 
    ) 

    ant.project.addBuildListener(listener) 
    project.configure(ant, command) 
    ant.project.removeBuildListener(listener) 

    return buffer.toString("UTF-8"); 
} 

Ejemplo:

String result = captureAntOutput(ant) { 
    echo(message: "hello") 
} 
assert result.contains("hello") 
Cuestiones relacionadas