Невозможно отловить исключение задачи Gradle типа Exec - PullRequest
1 голос
/ 30 марта 2020

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

Ошибка:

СБОЙ: сборка завершилась с исключением .

  • Что пошло не так: выполнение задачи не выполнено: isGitLFSInstalled.

    Произошла ошибка при запуске процесса 'команда' команда ''

Код:

task isGitLFSInstalled(type: Exec) {
commandLine 'command', '-v', 'git-lfs' // Fails here on environments that dont have "command"
ignoreExitValue true
standardOutput = new ByteArrayOutputStream()

ext.output = {
    return standardOutput.toString()
}

doLast {
    if (execResult.exitValue != 0) {
        throw new GradleException("Git LFS is not installed, please build project after installing Git LFS.\n" +
                "Refer to the following URL to setup Git LFS: https://git-lfs.github.com/")
    }
}

}

1 Ответ

1 голос
/ 30 марта 2020

Проблема, с которой вы столкнулись, описана здесь . Окружение commandLine с помощью try / catch не работает по простой причине: commandLine не выполняет вашу команду, она просто задает команду, которая будет выполняться задачей Exe c, когда она будет запущена.

Один из способов - не использовать задачи для выполнения команды. Например, вы можете использовать ProcessBuilder, заключенный в try / catch в finalizedBy, который будет запускаться только на этапе выполнения:

task myTask {
    finalizedBy {
        try {
            def proc = new ProcessBuilder("command", "-v", "git-lfs")
            proc.start().waitFor()
            // Do something with stdout or whatever.
        } catch (Exception e) {
            println("Couldn't find git-lfs.")
        }
    }
}

У меня сейчас не так много времени, но я надеюсь, что помогает.

...