Gradle - 执行所有GenerateMavenPom任务的自定义任务

时间:2015-09-11 12:40:45

标签: maven groovy gradle

我想编写一个Gradle任务,以便在我的所有子项目中共享。此任务查找子项目中调用类型为“GenerateMavenPom”的所有其他任务并执行这些任务。

通过这样做,我的子项目可以定义他们希望的任何Maven出版物,并且我可以使用诸如“gradle generateMavenPomFiles”之类的单个任务执行gradle来创建pom.xml,而无需知道每个子项目中的各个发布类型。为什么?因为Maven插件创建的发布任务的名称取决于发布类型。

在我的根build.gradle文件中的子项目块内,将子项目作为闭包委托传递:

task generateMavenPomFiles << {
    model {
        TaskCollection<GenerateMavenPom> pomTasks = subproject.tasks.matching { t -> t.TASK_TYPE.equals("GenerateMavenPom") }

        if (pomTasks != null) {
            pomTasks.each { pomTask -> pomTask.execute }
        }
    }
}

我根据插件文档访问了模型块中的Maven发布任务:

  

“maven-publish”插件利用了一些实验性支持   迟插件配置,任何GenerateMavenPom任务都不会   构造直到配置发布扩展。最简单的   确保在您配置发布插件的方法   尝试访问GenerateMavenPom任务是放置访问权限   在模型块内......

在我的子项目中,我有如下定义的Maven出版物:

publishing {
    publications {
        mavenCustom(MavenPublication) {
            artifacts = someArtifactTask.archivePath
            groupId = someGroupId
            artifactId = someArtifactId
            version = someVersion
        }
    }
}

当然,“gradle generateMavenPomFiles”不起作用。任务在每个子项目上执行,但我没有看到调用插件创建的实际Maven POM任务。

我是Gradle + Groovy的新手,所以也许我误解了一些东西,或者我的逻辑是错的。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码段执行此操作:

task runAllGenerateMavenPomTasks {
    dependsOn tasks.withType(GenerateMavenPom)
}