5

私は独自の gradle プラグインを作成しようとしていますが、一連のオブジェクトを構成できるようにする必要があります。これらのオブジェクトの数とそれらが何と呼ばれるかは、ユーザー次第です。

高度なカスタマイズ機能を備えたカスタム gradle プラグインを作成するための doco は非常に貧弱です。この種のことを行う方法について言及していますproject.container()が、私のユースケースで機能させる方法がわかりませんでした。

これは私のプラグインの構成 DSL の例です。

teregrin {
  terraformVersion = '0.6.6'

  root("dev"){
    accessKey = "flobble"
  }

  root("prd"){
  }
}

そして、これは私がそれを設定できるようにする私のプラグイン拡張オブジェクトです:

class TeregrinPluginExtension {
  boolean debug = false
  boolean forceUnzip = false
  String terraformVersion = null

  Set<TeregrinRoot> roots = []

  def root(String name, Closure c){
    def newRoot = new TeregrinRoot(name)
    c.setDelegate(newRoot)
    c()
    roots << newRoot
  }

}

標準的な方法でプラグインに接続された拡張機能:

 project.extensions.create("teregrin", TeregrinPluginExtension)

これは問題なく動作しますが、典型的な gradle DSL のスタイルではなく、かなり醜い構成スタイルです。

プラグイン構成の DSL を次のように変更するにはどうすればよいですか。

teregrin {
  terraformVersion = '0.6.6'

  roots {
    dev {
      accessKey = "flobble"
    }

    prd {
    }
  }
}
4

1 に答える 1