当前位置: 首页 > 知识库问答 >
问题:

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

戎劲
2023-03-14

我想写一个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个答案

端木昱
2023-03-14

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

task runAllGenerateMavenPomTasks {
    dependsOn tasks.withType(GenerateMavenPom)
}
 类似资料:
  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,

  • https://docs.gradle.org/current/userguide/custom_tasks.html 如何使此任务在执行阶段运行?正在传递一个空闭包 唯一的解决办法? 但是hello任务似乎是在构建的配置阶段调用的。

  • 我知道我可以执行“Gradle Build-X测试”,但是有没有一种方法可以创建一个自定义的Gradle任务,比如说,buildNoTests,它将构建我的所有项目,但将完全忽略测试(不编译/运行它们)? 我读到'assemble'任务是不够的,因为它可能会错过其他不是测试但包含在'build'任务中的任务。

  • 我想把多个分级任务作为一个来运行。所以不是 这行不通

  • 我有一个文件,看起来像这样 wsimport任务从wsdl文件生成所需的一些java文件。生成需要一些时间,所以我不希望每次构建jar或编译程序时都执行它。 wsclean任务旨在当wsdl发生更改时使用。 首先,我运行wsimport任务并确认文件生成正确,它们就是! 但是现在,当我运行gradle jar时,生成的文件被删除了。为什么? 当我注释掉wsclean任务时,jar任务成功地继续。为

  • 问题内容: 我很简单(或任何具有的任务) 现在,当我运行时,我总是看到任务正在执行或打印输出 为什么内部任务总是有输出? 问题答案: 如果您具有以下代码: 您正处于任务的 配置 阶段。此阶段在脚本评估期间运行。如果要在执行任务时打印某些内容,则需要为任务添加 操作 。 看起来像: 运行任务时将评估这段代码。与在Task的对象上调用方法完全相同。您可以添加许多操作。 编辑 我也强烈建议您阅读此博客文