2017-01-16 3 views
0

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

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

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

Спасибо!

ответ

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] 
Смежные вопросы