1

我想制作 releaseBuild 任务,在构建项目之前执行干净的任务。

我已经准备好了脚本,它可以很好地在 releaseBuild 任务之前进行清理,而不是在完成之前清理,这要归功于jar.mustRunAfter(clean).

但是,我还希望有可能执行仅在 releaseBuild 成功完成后才会执行的 publishToMavenLocal 任务(因此清理和构建)。然后就有问题了。

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.
4

1 回答 1

1
  1. 在脚本末尾添加。
publishMavenJavaPublicationToMavenLocal.mustRunAfter(clean)
  1. 有一个任务树插件在这种情况下非常有用。

  2. 在微调任务配置时,区分 Gradle 构建的配置和执行阶段很方便。如果您阅读有关Build Lifecycle的信息,将会有所帮助。

  3. clean任务添加依赖项通常带来的麻烦多于好处。考虑仅添加“软”依赖mustRunAfter项,并将clean任务显式添加到命令行:

gradle clean releaseBuild publishToMavenLocal
于 2019-01-30T07:59:44.103 回答