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

Gradle插件开发(Java代码):更新内部应用插件的扩展属性,gradle,plugins,gradle-plugin,Gradle,Plugins,Gradle Plugin,我是Gradle插件开发的新手,我正在用Java(而不是Groovy)编写代码。 我的问题与此有些相似 我正在开发一个插件,它应用另一个插件,并试图通过定制一些配置来提供一个包装器。 应用的插件有几个扩展名,比如dataExtension,dependencyCheck扩展名,我可以在build.gradle文件(配置)中为这些扩展名配置值 现在我想从我的自定义插件而不是build.gradle文件中配置这些值。所以我想在我的插件中重复使用dependencyCheck插件的这些扩展和配置值 以

我是Gradle插件开发的新手,我正在用Java(而不是Groovy)编写代码。 我的问题与此有些相似

我正在开发一个插件,它应用另一个插件,并试图通过定制一些配置来提供一个包装器。 应用的插件有几个扩展名,比如
dataExtension
dependencyCheck
扩展名,我可以在build.gradle文件(配置)中为这些扩展名配置值

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

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

  • 直接使用插件的属性:

    DependencyCheckPlugin p = project.getPlugins.apply(DependencyCheckPlugin.class)
    p.setProperty("dependencyCheck.outputDirectory", project.getBuildDir());
    
  • 这不是预期的效果

  • 直接将属性设置为project

    DependencyCheckPlugin p = project.getPlugins.apply(DependencyCheckPlugin.class)
    project.setProperty("dependencyCheck.outputDirectory", project.getBuildDir());`
    
  • 我收到错误消息project没有属性
    dependencyCheck.outputDirectory

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

    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());
    
        }
    
    }
    
    包lol;
    导入org.gradle.api.Plugin;
    导入org.gradle.api.Project;
    导入org.owasp.dependencycheck.gradle.DependencyCheckPlugin;
    导入org.owasp.dependencycheck.gradle.extension.DependencyCheckExtension;
    公共类插件实现插件{
    @凌驾
    公开作废申请(项目){
    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);
    生命周期(“LOL{}”,dce.getAutoUpdate());
    dce.setAutoUpdate(真);
    生命周期(“LOL{}”,dce.getAutoUpdate());
    }
    }
    

    这就是整个示例。

    我的答案解决了问题吗?设置自动更新很容易。但发现难以更新内部DataExtension(DependencyCheckExtension内的扩展名)。后来发现它可以使用ExtensionAware接口来完成。