Gradle 指定默认扩展值的插件

Gradle plugin specifying default extension values

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

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

谢谢!

您可以应用一个使用 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]