Сделать чистое задание перед любым другим - PullRequest
0 голосов
/ 29 января 2019

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

Я подготовил сценарий, который прекрасно работает для очистки перед задачей releaseBuild, а не для очистки непосредственно перед завершением благодаря jar.mustRunAfter(clean).

Однако я также хотел бы иметь возможность выполнить задачу publishToMavenLocalэто будет сделано только после того, как releaseBuild закончит успешно (поэтому уборка и сборка).Тогда возникает проблема.

plugins {
    id 'java'
    id 'maven-publish'
}

group 'com.example'
version '1.0-SNAPSHOT'

task releaseBuild {
    outputs.upToDateWhen { false }
    // generatePomFileForMavenJavaPublication.mustRunAfter(clean)
    jar.mustRunAfter(clean)
    releaseBuild.dependsOn(clean, build)
}

publishToMavenLocal.dependsOn(releaseBuild)

publishing {
    publications {
        mavenJava(MavenPublication) {
            pom {
                from components.java
                packaging 'jar'
            }
        }
    }
}

gradle releaseBuild работает хорошо.gradle publishToMavenLocal показывает ошибку:

> Task :generatePomFileForMavenJavaPublication
> Task :clean
> Task :compileJava NO-SOURCE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :jar
> Task :publishMavenJavaPublicationToMavenLocal FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':publishMavenJavaPublicationToMavenLocal'.
> Failed to publish publication 'mavenJava' to repository 'mavenLocal'
   > java.io.FileNotFoundException: __path__\build\publications\mavenJava\pom-default.xml (System nie może odnaleźć określonej ścieżki -- File not found)

Очистка происходит после создания файла pom.

Когда я раскомментирую строку с generatePomFileForMavenJavaPublication.mustRunAfter(clean), у меня появляется ошибка:

> Could not get unknown property 'generatePomFileForMavenJavaPublication' for task ':releaseBuild' of type org.gradle.api.DefaultTask.

1 Ответ

0 голосов
/ 30 января 2019
  1. Добавьте в конец вашего сценария.
publishMavenJavaPublicationToMavenLocal.mustRunAfter(clean)

Существует плагин дерево задач , который очень полезен в таких ситуациях.

Удобно различать фазы конфигурации и выполненияGradle build при точной настройке конфигурации задач.Это поможет, если вы прочитаете о Build Lifecycle .

Добавление зависимостей к задаче clean обычно дает больше головной боли, чем пользы.Попробуйте добавить только «мягкие» зависимости, такие как mustRunAfter и явно добавить задачу clean в командную строку:

gradle clean releaseBuild publishToMavenLocal
...