如何将Gradle插件应用于自身?

时间:2018-11-19 03:02:16

标签: gradle

我有一个Gradle插件,该插件整理了要在代码库上执行的一系列检查。我希望对插件本身进行同样的检查。

尝试1

我找到了解决方案here的一部分,该解决方案实际上试图使用buildSrc生成一个插件,然后可以从主项目中应用它。

这给我一个别人也看到的错误:

No signature of method: GradlePlugins.buildscript() is applicable for argument types: (GradlePlugins$_run_closure1) values: [GradlePlugins$_run_closure1@2e7cad0f]

尝试2

这是根据线索中的第二条建议改编而成的

apply plugin: new GroovyScriptEngine(
        [ file('src/main/java').absolutePath,
          file('src/main/groovy').absolutePath,
          file('src/main/resources').absolutePath ].toArray(new String[0]),
        this.class.classLoader)
        .loadScriptByName('acme/plugins/CommonPlugin.groovy')

但是似乎无法在与插件相同的程序包中找到类:

Caused by: groovy.lang.MissingPropertyException: No such property: CheckStringsExtension for class: acme.plugins.CommonPlugin

尝试3

对另一个要点有一条评论,建议如果插件脚本包含一个包声明,它可能不起作用,因此我也尝试制作一个简单的包装器:

import acme.plugins.CommonPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project

class SelfApplyBootstrap implements Plugin<Project> {
    @Override
    void apply(Project project) {
        new CommonPlugin().apply(project);
    }
}

然后:

apply plugin: new GroovyScriptEngine(
        [ file('src/main/java').absolutePath,
          file('src/main/groovy').absolutePath,
          file('src/main/resources').absolutePath ].toArray(new String[0]),
        this.class.classLoader)
        .loadScriptByName('SelfApplyBootstrap.groovy')

但是我仍然遇到相同的错误:

Caused by: groovy.lang.MissingPropertyException: No such property: CheckStringsExtension for class: acme.plugins.CommonPlugin

0 个答案:

没有答案