首页 > 解决方案 > Java-gradle-plugin validatePlugins 任务

问题描述

我正在测试validatePlugins来自核心插件java-gradle-plugin 的任务,该插件在构建期间似乎什么都不做,或者如果我直接运行它。

我有一个构建脚本,它使用不存在的插件类定义插件。注意foo.bar.NonexistingPluginClass这个类不在我的源代码中。

plugins {
    id 'java-gradle-plugin'
}

gradlePlugin {
    plugins {
        create("simplePlugin") {
            id = "foo.bar.validation-plugin-test"
            implementationClass = "foo.bar.NonexistingPluginClass"
        }
    }
}

现在Gradle官方页面显示正在进行以下验证:

implementation-class 属性引用 jar 中的有效类文件。

仍然当我运行build也触发validatePlugins一个并且没有报告警告的任务时,什么也没有。另外,如果我检查build/reports/plugin-development/validation-report.txt文件只是空白。

相反,我看到的是在执行 validatePlugins 之前执行的 :jar 任务会在日志中抛出一条消息,如下所示:

> Task :compileJava
> Task :pluginDescriptors
> Task :processResources
> Task :classes

> Task :jar
:jar: A valid plugin descriptor was found for foo.bar.validation-plugin-test.properties but the implementation class foo.bar.NonexistingPluginClass was not found in the jar.

> Task :assemble
>...
> Task :validatePlugins
> Task :check
> Task :build

BUILD SUCCESSFUL in 1s

我是否遗漏了一些额外的配置,以便收到关于 implementationClass 实际上并未引用validatePlugins任务中现有类的警告?还是我误解了文档?这是一个错误吗?

PS:使用 Gradle 7.2、Java 15 运行

标签: gradlegradle-plugin

解决方案


该任务ValidatePlugins不检查插件元数据,但对插件类执行静态代码分析:

通过检查任务和工件转换等工作项的属性注释来验证插件。此任务应在 Gradle 插件项目中用于对插件类进行静态分析。

您在构建期间看到的输出与java-gradle-plugin文档中描述的内容相匹配。它读到

jar[...] 在任务执行期间执行插件元数据的验证。

并进一步

任何失败的验证都将导致警告消息。


推荐阅读