我想制作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.
答案 0 :(得分:0)
publishMavenJavaPublicationToMavenLocal.mustRunAfter(clean)
有一个task-tree插件,在这种情况下非常有用。
在微调任务配置时,很容易区分Gradle构建的配置阶段和执行阶段。如果您了解有关Build Lifecycle的信息,将对您有所帮助。
向clean
任务添加依赖项通常带来的麻烦多于收益。考虑仅添加诸如mustRunAfter
之类的“软”依赖项,并将clean
任务显式添加到您的命令行中:
gradle clean releaseBuild publishToMavenLocal