2 つのソースの場所の構成を公開する必要がある小さな gradle プラグインを作成しています。私は現在、プロジェクト拡張機能を介してこれを行っており、コンシューマ gradle ファイルは次のような構文になります。
generator {
idl {
baseDir = "src"
include = "*.idl"
exclude = "**/.svn"
}
template {
baseDir = "src"
include = "*.template"
exclude = "**/.svn"
}
}
これに対する私の最初の試みは、次のように拡張クラスに 2 つのプロパティを設定することで達成されました。
class GeneratorExtension {
public static final NAME = "generator"
private Project project
GeneratorExtension(Project project) {
this.project = project
}
@Input ConfigurableFileTree idl
@Input ConfigurableFileTree template
void idl(String dir, Closure closure) {
idl = project.fileTree(dir, closure)
}
void template(String dir, Closure closure) {
template = project.fileTree(dir, closure)
}
}
これにより、gradle ファイルの構文が次のように変更されます。
generator {
idl (dir = "src") {
include = "*.idl"
exclude = "*"
}
template (dir = "src") {
include = "*.template"
exclude = ""
}
}
これで動作するようになりましたが、私が望むクリーンなユーザビリティは得られません。私は gradle と groovy の両方にかなり慣れていません。DefaultNamedDomainObjectSet を使用して目的を達成できるように見えますが、それは内部クラスを参照しているため、ここにいます。
拡張機能を追加する正しい方法は FileTree を使用しますが、クリーンなコンシューマー構文を維持しますか?
前もって感謝します。