【问题标题】:Gradle plugin specifying default extension valuesGradle 插件指定默认扩展值
【发布时间】:2017-01-16 19:15:48
【问题描述】:

我计划编写自定义插件来包装几个代码质量 gradle 插件。逻辑很简单:使用这种自定义质量,我想为我们所有的项目强制执行“默认”标准。另一方面,我希望所有包装的插件仍然是可定制的(例如,我想默认使用“基本”规则集设置 PMD 插件,但我绝对不想限制任何人添加额外的规则集)。

级联扩展的推荐策略是什么?

  • 我是否应该为所有插件执行 project.create({extension}),检查值是否已设置并默认它们(以及如何区分默认值与插件扩展和用户设置的默认值?)
  • 我应该创建 myOwnExtension 并设置来自这个自定义的包装插件扩展的值吗?
  • 有没有其他方法可以自动进行级联?

谢谢!

【问题讨论】:

    标签: gradle gradle-plugin


    【解决方案1】:

    您可以应用使用 project.afterEvaluate 的插件,然后以编程方式查找插件,如果已应用,则检查 pmd 块并根据需要进行配置。如果未应用插件,则应用插件并设置块的默认值。

    apply plugin: "groovy"
    
    group = 'com.jbirdvegas.q41683529'
    version = '0.1'
    
    repositories {
        jcenter()
    }
    
    class PmdWrapper implements Plugin<Project> {
        @Override
        void apply(Project target) {
            target.afterEvaluate {
                def pmdPlugin = target.plugins.findPlugin(PmdPlugin)
                // check if the plugin is already applied if not apply it
                if (!pmdPlugin) {
                    target.plugins.apply(PmdPlugin)
                }
                // get a reference to the extension and use it to manipulate the values
                println target.pmd.ruleSets
                setValues(target.pmd as PmdExtension)
                println target.pmd.ruleSets
    
                println "Now configured ruleSets: ${(target.pmd as PmdExtension).ruleSets}"
            }
        }
    
        static setValues(PmdExtension pmd) {
            // here you can set the values or add or manipulate as needed
            if (!pmd.ruleSets.contains('basic') || !pmd.ruleSets.contains('braces')) {
                pmd.ruleSets << "basic" << "braces"
            }
            // blah for other values
        }
    }
    
    apply plugin: PmdWrapper
    task nothing {}
    

    然后就可以看到pmd插件被配置的结果了

    $ ./gradlew -b build_simple.gradle nothing -q
    [java-basic]
    [java-basic, basic, braces]
    Now configured extension: [java-basic, basic, braces]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 2017-06-03
      • 1970-01-01
      相关资源
      最近更新 更多