插件任务在配置阶段后执行

时间:2016-10-26 14:53:39

标签: gradle

我正在为新的构建管道构建一整套插件。我有一些元数据,如果它不存在于构建文件中,我希望它失败。例如

inventory_link: '124djsj39r'

这会将构建链接回我们的库存系统。如果构建中不存在该标记,我不希望开发人员能够做下蹲。没有测试,没有编译,没有构建,没有任何东西。我希望这个项目成为一组毫无价值的文件。

现在阅读文档,我理解构建生命周期,sorta。有一个init,config,execute,clean。基本上如何配置自定义插件(将其写为独立jar),以便自动执行验证任务,以确保在构建生命周期的配置阶段结束时存在此标记?

多项目构建如何影响这个?多项目构建的每个单独项目也必须具有此标记。

修改

我能够回到这一点。我让它运行并执行闭包,问题是project_hash总是为空。现在被授予,我正在使用testkit,所以我可能正在处理testkit中的一些奇怪的东西。看错了什么?:

@Override
void apply(Project project) {
    this.project = project

    def metadata = new Metadata()

    // Create and install the extension object
    project.extensions.create('metadata', MetadataExtension, metadata)

    def ignore = project.tasks.create(METADATA_REPORT, MetadataReportTask)
    ignore.group = PLUGIN_GROUP
    ignore.description = 'Gets the detailed information for this project and formats it into a user readable report'

    project.afterEvaluate {
        throw new InvalidUserDataException(project.metadata.metadata.project_hash)
    }
}

1 个答案:

答案 0 :(得分:0)

您放在build.gradle脚本主体中的任何代码都将在配置阶段运行。如果你想最后完成,只需把它放在底部。

if (inventory_link == null) //or whatever check makes sense
    throw new GradleException('Hey, you need to set the inventory_link')

请注意,clean不是gradle build lifecycle中的“阶段”,如init,config,execute。它是通过一项任务实现的。