Как исключить задачу или метод gradle во время сборки

Я определил задачу, которая читает файл свойств и обновляет определенное поле. Я хочу, чтобы это запускалось только тогда, когда я выполняю команду release, а не во время сборки.

Я использую этот плагин Gradle-релиз для выпуска: https://github.com/researchgate/gradle-release

Этот плагин обновляет версию в файле gradle.properties до следующей версии при каждом выпуске. Мне нужно сохранить текущий номер версии, и поэтому я написал этот метод.

Тем не менее, эта задача выполняется каждый раз, когда я делаю сборку. Я попытался изменить его на метод и вызвать метод в "uploadArchives", который, как я предполагаю, запускается только во время "релиза". Пока нет результата. Он продолжает выполняться на каждой сборке!

Как я могу исключить его из "сборки" и вызывать его только в случае выпуска?

Вот задача и некоторые фрагменты кода:

task restoreCurrentVersion {
    try {
        String key = 'currentVersion'
        File propertiesFile = project(':commons').file("gradle.properties")
        String currentVersion = project(':commons').version
        this.ant.replaceregexp(file: propertiesFile, byline: true) {
            regexp(pattern: "^(\\s*)$key(\\s*)=(\\s*).+")
            substitution(expression: "\\1$key\\2=\\3$currentVersion")
        }
    } catch (BuildException be) {
        throw new GradleException('Unable to write version property.', be)
    }
}

uploadArchives {
    repositories.mavenDeployer {
        repository(url: 'file://Users/my.home/.m2/repository/')
    }
 //   restoreCurrentVersion()   //Uncommenting this makes the method (when converted the above task to a method) to execute always
}

createReleaseTag.dependsOn uploadArchives    
ext.'release.useAutomaticVersion' = "true"

1 ответ

Решение
  1. Вам нужно добавить << или doLast заблокировать определение вашей задачи. В противном случае он будет запускаться на этапе настройки, что практически всегда происходит при выполнении любой другой задачи. см. здесь: Почему всегда выполняется моя задача Gradle?

  2. Не существует удобного способа вызвать / вызвать задачу из другой задачи напрямую, как вы пытались сделать в uploadArchives вместо этого вы используете dependsOn или же finalizedBy настроить зависимости задачи. Если uploadArchives зависит от restoreCurrentVersion, restoreCurrentVersion будет вызываться первым при каждом вызове uploadArchives.

Другие вопросы по тегам