先做干净的任务

时间:2019-01-29 13:16:12

标签: java gradle maven-publish

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

由于jar.mustRunAfter(clean),我准备的脚本非常适合在releaseBuild任务之前进行清理,而不是在完成之前进行清理。

但是,我也希望有可能执行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 :(得分:0)

  1. 在脚本的结尾处添加。
publishMavenJavaPublicationToMavenLocal.mustRunAfter(clean)
  1. 有一个task-tree插件,在这种情况下非常有用。

  2. 在微调任务配置时,很容易区分Gradle构建的配置阶段和执行阶段。如果您了解有关Build Lifecycle的信息,将对您有所帮助。

  3. clean任务添加依赖项通常带来的麻烦多于收益。考虑仅添加诸如mustRunAfter之类的“软”依赖项,并将clean任务显式添加到您的命令行中:

gradle clean releaseBuild publishToMavenLocal