2016-02-10 2 views
3

Я хочу чистую сборку, где вы можете точно видеть, что произошло, но вся информация сохраняется - так по существу для каждой задачи, я хочу, чтобы она записывала вывод в файл и отображала его только если задача не выполнена.Задача Gradle doLast, если задача не выполнена

Я пытался добиться этого в градиенте, но я побежден, потому что doLast не запускается, если задача не работает. Вот мой «почти» рабочий образец:

task fakeTask(type: Exec) { 

    standardOutput = new ByteArrayOutputStream() 
    commandLine 'cmd', '/c', 'silly' 
    doLast { 
     new File("build.log") << standardOutput.toString() 
     if (execResult.exitValue != 0) println standardOutput.toString() 
    } 
} 

Есть ли альтернатива doLast, которая будет работать в любое время? Любой другой способ сделать это? - особенно, поскольку я хочу сделать это для каждой отдельной задачи, которую у меня есть?

ответ

4

Добавить ignoreExitValue true в определение своей задачи, чтобы подавить выброс исключения, когда значение выхода отличное от нуля.

+0

Я действительно задавался вопросом об этом - но по существу я не хочу игнорировать значение выхода - могу ли я затем выполнить задачу, если я сделаю то, что мне нужно? –

+1

На самом деле, это не так уж плохо: task fakeTask (type: Exec) { standardOutput = new ByteArrayOutputStream() commandLine 'cmd', '/ c', 'глупо' ignoreExitValue = true; doLast { новый файл ("fakeTaskOutput.txt") << standardOutput.toString() если (execResult.exitValue! = 0) { Println standardOutput.toString() бросить новый GradleException ("faketask вернулся ExitCode из" + execResult.exitValue) } } } –

+0

Точно вы сообщаете заданию exec игнорировать значение выхода, но вы обрабатываете его самостоятельно и генерируете исключение в конце. – RaGe

2

это мое окончательное решение:

tasks.withType(Exec) { 
    standardOutput = new ByteArrayOutputStream() 
    ignoreExitValue = true 
    doLast { 
     new File("gradle.log") << standardOutput.toString() 
     if (execResult.exitValue != 0) 
     { 
      println standardOutput.toString() 
      throw new GradleException(commandLine.join(" ") + " returned exitcode of " + execResult.exitValue) 
     } 
    } 
} 
Смежные вопросы