Gradle 插件开发(Java 代码):更新内部应用插件的扩展属性

Gradle Plugin Development (Java code): Update extension properties for Internal applied Plugin

我是 Gradle 插件开发的新手,我正在 Java(而不是 Groovy)中编写代码。 我的问题有点类似于这个

我正在开发一个应用另一个 plugin 的插件,并尝试通过自定义一些配置来提供包装器。 应用的插件有一些扩展名,例如 dataExtensiondependencyCheck 扩展名,我可以在 build.gradle 文件中配置值(sample 配置)。

现在我想从我的自定义插件而不是 build.gradle 文件配置这些值。所以我想在我的插件中重新使用 dependencyCheck 插件的这些扩展和配置值

我在以编程方式应用插件后尝试了以下操作:

  1. 直接使用插件的属性:

    DependencyCheckPlugin p = project.getPlugins.apply(DependencyCheckPlugin.class)
    p.setProperty("dependencyCheck.outputDirectory", project.getBuildDir());
    

这没有按预期工作。

  1. 直接给项目设置属性

    DependencyCheckPlugin p = project.getPlugins.apply(DependencyCheckPlugin.class)
    project.setProperty("dependencyCheck.outputDirectory", project.getBuildDir());`
    

我收到错误消息项目没有 属性 dependencyCheck.outputDirectory

  1. 试图获取应用插件的扩展并设置属性

    DependencyCheckExtension depExtn = (DependencyCheckExtension)project.getExtensions().getByType(DependencyCheckExtension.class);
    depExtn.setAutoUpdate(false);
    depExtn.setOutputDirectory(extn.getOutputdir());
    depExtn.setFormat(ReportGenerator.Format.ALL);
    

我收到错误消息,指出在此项目中找不到扩展。

关于如何从外部插件配置内部插件有什么建议吗?

我是这样实现的:

package lol;

import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.owasp.dependencycheck.gradle.DependencyCheckPlugin;
import org.owasp.dependencycheck.gradle.extension.DependencyCheckExtension;

public class LolPlugin implements Plugin<Project> {

    @Override
    public void apply(Project project) {

        final DependencyCheckPlugin dcp = project.getPlugins().apply(DependencyCheckPlugin.class);
        project.getLogger().lifecycle("LOL {}", dcp);

        final DependencyCheckExtension dce = (DependencyCheckExtension) project.getExtensions().findByName("dependencyCheck");
        project.getLogger().lifecycle("LOL {}", dce);
        project.getLogger().lifecycle("LOL {}", dce.getAutoUpdate());
        dce.setAutoUpdate(true);
        project.getLogger().lifecycle("LOL {}", dce.getAutoUpdate());

    }

}

Here就是整个例子。