Сбой сборки Gradle, когда что-либо на стандартной ошибке - PullRequest
0 голосов
/ 07 декабря 2018

Как я могу настроить Gradle на сбой сборки в конце (не на сбой быстро), если что-либо напечатано в выводе стандартной ошибки какой-либо задачей или плагином?

Я не нашел способа сделать этов официальном API.

1 Ответ

0 голосов
/ 08 декабря 2018

Вот пример build.gradle, который показывает, как это может работать:

// create a listener which collects stderr output:
def errMsgs = []
StandardOutputListener errListener = { errMsgs << it }

// add the listener to both the project *and* all tasks:
project.logging.addStandardErrorListener errListener
project.tasks.all { it.logging.addStandardErrorListener errListener }

// evaluate the collected stderr output at the end of the build:
gradle.buildFinished {
  if (errMsgs) {
    // (or fail in whatever other way makes sense for you)
    throw new RuntimeException(errMsgs.toString())
  }
}


// example showing that the project-level capturing of stderr logs works:
if (project.hasProperty('projErr'))
  System.err.print('proj stderr msg')

// example showing that the task-level capturing of stderr logs works:
task foo {
  doLast {
    System.err.print('task stderr msg')
  }
}

// example showing that stdout logs are not captured:
task bar {
  doLast {
    System.out.print('task stdout msg')
  }
}

Примеры во второй половине приведены только для того, чтобы показать, что он работает так, как ожидалось.Попробуйте построить с различными аргументами / параметрами командной строки:

# doesn’t fail:
./gradlew bar
# fails due to project error:
./gradlew -PprojErr bar
# fails due to task error:
./gradlew foo
# fails due to both task and project error:
./gradlew -PprojErr foo
...