我想编写一个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的新手,所以也许我误解了一些东西,或者我的逻辑是错的。
非常感谢任何帮助!
答案 0 :(得分:0)
您可以使用以下代码段执行此操作:
task runAllGenerateMavenPomTasks {
dependsOn tasks.withType(GenerateMavenPom)
}