Gradle Задача exec возвращает ненулевое значение выхода и не выполняет сборку, но я хочу, чтобы она не сработала и вместо этого выполнила другую задачу
У меня есть задача exec, настроенная довольно по умолчанию, что-то вроде:
task myTask(type:Exec) {
workingDir '.'
commandLine './myscript.sh'
doLast {
if(execResult == 0) {
//one thing
} else {
//another thing
}
}
}
Но, к сожалению, он никогда не выполняет блок doLast, когда ошибка вызывается script. Вместо этого он пропускает это и не выполняет всю сборку с помощью
Выполнение не выполнено для задачи ': project: myTask'. Процесс "command". /myscript.sh "завершен с ненулевым значением выхода 1"
Это бесполезно для меня. Вся идея завершения myscript.sh с ненулевым значением выхода - это то, что я могу выполнить некоторый код в ответ на него. Что мне нужно сделать, чтобы не вывести из строя сборку, но зафиксировать результат и выполнить действие в ответ? Спасибо за помощь!
Ответы
Ответ 1
TL; DR - использовать ignoreExitValue = true
Когда я читал документацию примерно в пятидесятый раз, я наконец увидел, что есть свойство ignoreExitValue, которое по умолчанию имеет значение false. Но если вы установите значение true, вы сможете выполнять свои собственные задачи в блоке doLast.
task myTask(type:Exec) {
workingDir '.'
commandLine './myscript.sh'
ignoreExitValue true
doLast {
if(execResult.getExitValue() == 0) {
//one thing
} else {
//another thing
}
}
}
Ответ 2
Если ответ ignoreExitValue
не работает, другое решение состоит в том, чтобы окружить commandLine
try { ... } catch (Exception e() { ... }
.