2017-01-16 16 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 {} 

次にあなたが

$ ./gradlew -b build_simple.gradle nothing -q 
[java-basic] 
[java-basic, basic, braces] 
Now configured extension: [java-basic, basic, braces] 
に構成されているPMDプラグインの結果を見ることができます
関連する問題