Gradle插件指定默认扩展值

Gradle插件指定默认扩展值,gradle,gradle-plugin,Gradle,Gradle Plugin,我计划编写定制插件,包装几个代码质量的gradle插件。逻辑很简单:使用这种定制质量,我希望为我们的所有项目强制执行“默认”标准。另一方面,我希望所有包装好的插件仍然是可定制的(例如,我希望在默认情况下使用“基本”规则集设置PMD插件,但我绝对不希望限制任何人添加额外的规则集) 级联扩展的推荐策略是什么 我应该为所有插件创建({extension})项目,检查值是否已设置并设置为默认值(以及如何区分默认值和插件扩展以及用户设置的默认值?) 我是否应该创建myOwnExtension并从这个定制

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

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

  • 我应该为所有插件创建({extension})项目,检查值是否已设置并设置为默认值(以及如何区分默认值和插件扩展以及用户设置的默认值?)
  • 我是否应该创建myOwnExtension并从这个定制插件中设置包装插件扩展的值
  • 有没有其他方法可以自动进行级联

谢谢

您可以应用使用
项目的插件。评估后
以编程方式查找插件,如果已应用,则检查
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 {}
$ ./gradlew -b build_simple.gradle nothing -q
[java-basic]
[java-basic, basic, braces]
Now configured extension: [java-basic, basic, braces]