Gradle Plugin Development(Java代码):更新Internal applied Plugin的扩展属性

时间:2017-09-17 18:26:28

标签: gradle plugins gradle-plugin

我是Gradle插件开发的新手,我用Java编写代码(不是Groovy)。 我的问题有点类似于thread

我正在开发一个插件,它应用另一个plugin并尝试通过自定义少量配置来提供包装器。 应用的插件具有很少的扩展名,例如dependencyCheckDependencyCheckPlugin p = project.getPlugins.apply(DependencyCheckPlugin.class) p.setProperty("dependencyCheck.outputDirectory", project.getBuildDir()); 扩展名,我可以在build.gradle文件中配置值(sample配置)。

现在我想从我的自定义插件而不是build.gradle文件配置这些值。所以我想在我的插件

中重用dependencyCheck插件的这些扩展和配置值

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

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

    DependencyCheckPlugin p = project.getPlugins.apply(DependencyCheckPlugin.class)
    project.setProperty("dependencyCheck.outputDirectory", project.getBuildDir());`
    
  2. 这不能按预期工作。

    1. 直接将属性设置为项目

      dependencyCheck.outputDirectory
    2. 我收到错误消息项目没有属性DependencyCheckExtension depExtn = (DependencyCheckExtension)project.getExtensions().getByType(DependencyCheckExtension.class); depExtn.setAutoUpdate(false); depExtn.setOutputDirectory(extn.getOutputdir()); depExtn.setFormat(ReportGenerator.Format.ALL);

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

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

        有关如何从外部插件配置内部插件的任何建议吗?

1 个答案:

答案 0 :(得分:2)

我已按以下方式实施:

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就是整个例子。