Плагин Gradle, указывающий значения расширения по умолчанию

Я планирую написать собственный плагин, обертывающий несколько плагинов Gradle качества кода. Логика проста: используя это пользовательское качество, я хочу применить стандарты «по умолчанию» для всех наших проектов. С другой стороны, я хочу, чтобы все обернутые плагины по-прежнему можно было настраивать (например, я хотел бы установить плагин PMD с «базовым» набором правил по умолчанию, но определенно я не хочу никого ограничивать добавлением дополнительных наборов правил).

Какова рекомендуемая стратегия каскадирования расширений?

  • Должен ли я делать project.create({extension}) для всех плагинов, проверять значения, если значения установлены, и устанавливать их по умолчанию (и как мне отличить значение по умолчанию от расширения плагина и значение по умолчанию, установленное пользователем?)
  • Должен ли я создать myOwnExtension и установить значения обернутых расширений плагинов из этого пользовательского?
  • Есть ли другой способ, как автоматически сделать каскад?

Спасибо!


person malejpavouk    schedule 16.01.2017    source источник


Ответы (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]
person JBirdVegas    schedule 16.01.2017