Отметить задачу Gradle как «не выполненную» - PullRequest
0 голосов
/ 22 марта 2020

Я хочу добавить дополнительную задачу в «сборку» Gradle, в частности, для копирования файла в ресурсы.

Итак, я делаю это:

task copySettingsGradle(type: Copy) {
    from file("settings.gradle")
    into file("src/main/resources")
}
build.dependsOn copySettingsGradle

Но если settings.gradle нет, в данный момент он, похоже, молча терпит неудачу: сборка продолжается как обычно.

Я хочу предотвратить сборку в случае сбоя этой требуемой задачи. Для этого мне кажется, что мне нужны две вещи: средство определения, что from.file(...) не может найти файл, и затем способ установки флага «сбой» в задаче ... или что-то в этом роде.

Попытка решить эту проблему привела меня к AbstractCopyTask, а затем к CopySourceSpe c .от ... но я не мудрый.

Конечно, я мог используйте non-DSL Groovy для копирования и проверки успешности. Но вопрос маркировки требуемой задачи как невыполненной, озадачивает меня.

Есть вопрос здесь , от 8 лет до go, о "способе остановить сборку Gradle". В своем ответе Питер Нидервизер говорит, что «были обсуждения, чтобы добавить [способ остановить]».

Кроме того, на этой странице официальной документации Gradle Я вижу, что используется следующее выражение: «Задача будет помечена как невыполненная» (если таймер закончится). «Помечено как неудачное» ... и это означает ???

Я нахожу довольно удивительным, что я не смог найти никакой информации по этому поводу! Понятие «зависимость» подразумевает зависимость от существования или успеха чего-то другого. Я не только не могу узнать, введен ли такой механизм (кроме броска GradleException) в Gradle, но я даже не могу говорить об этом. Расстроенный!

1 Ответ

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

Вы можете использовать задачу копирования ANT, чтобы сделать это. Gradle позволяет делегировать вызовы в базовую среду выполнения ANT.

В задаче копирования ANT имеется опция с именем failonerror, которая возвращает вас к поведению fail-if-file-not-found.

It ' выглядело бы примерно так:

task copySettingsGradle {
    doLast {
        ant.copy(file: 'settings.gradle',
            todir: 'src/main/resources',
            overwrite: true,
            failonerror: true)
    }
}

Для всех доступных опций смотрите документацию ANT: https://ant.apache.org/manual/Tasks/copy.html

...