2012-07-10 8 views
6

Io chiamo ant.signjar da uno script gradle. Come posso acquisire l'output? Non l'ho nemmeno gestito facilmente per elevare l'output da INFO a un altro livello, né per intercettare o avvolgere l'output per gli avvisi di errore a livello WARN. Attualmente il signjar fa eco al fatto che il certificato scadrà presto, ma questo non è mostrato a livello WARN che non è così bello.Come intercettare o elevare i messaggi di registro quando si chiama un'attività Ant da Gradle

+0

Come un lato nota: Gradle fornisce il [plug firma] (http://gradle.org/docs/current/userguide/signing_plugin.html) per la firma artefatti quindi non è necessario utilizzare l'attività Ant. –

+0

@BenjaminMuschko Conosco il plug-in per la firma, ma la documentazione dice che è solo per la generazione di firme PGP di file, ad es. per il caricamento su Maven Central. Come posso firmare un file JAR con il plugin di firma? – Vampire

risposta

2

Suppongo che l'attività Ant utilizzi il framework di registrazione di Ant e non solo la stampa su standard. In tal caso, hai provato quanto segue?

task taskThatCallsAntTask { 
    logging.level = LogLevel.INFO 
} 

Se configurato in questo modo, il livello di log sarà cambiato per INFO mentre l'attività è in esecuzione (e ritornato di nuovo in seguito), non importa quale livello è impostato il login quando si richiama Gradle. Si noti che non è possibile elevare il livello di registro di un evento di registro Ant; dipende dall'attività Ant a quale livello registra.

+0

Funziona, ma dà troppa registrazione in quanto stampa anche altri messaggi che non sono avvisi. Preferirei davvero se potessi intercettare l'output ed elevarlo su un ambito per-line. Qualche idea su questo? – Vampire

+0

Invia una richiesta di funzionalità (* idea *) su http://forums.gradle.org. –

+0

Fatto così a http://forums.gradle.org/gradle/topics/interception_of_ant_task_output, grazie – Vampire

0

Ecco un metodo che acquisisce l'output di un'attività Ant registrando un BuildListener personalizzato per la durata della chiamata. Utilizzo

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"); 
} 

Esempio:

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