gradle ScalaTest プラグインを使用するときに、新しい構成オプションを追加しようとしています。
https://github.com/maiflai/gradle-scalatest
そのソース コードでは、config が動的拡張として Test クラスに挿入されました。
static void configure(Test test) {
...
Map<String, ?> config = [:]
test.extensions.add(ScalaTestAction.CONFIG, config)
test.extensions.add("config", { String name, value -> config.put(name, value) })
test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })
...
}
groovy を DSL として使用している場合、このプロパティを呼び出すのは簡単です。
test {
configMap([
'db.name': 'testdb'
'server': '192.168.1.188'
])
}
残念ながら、kotlin DSL は静的型付けのためにこのメソッドを使用できません。テスト プラグインとして呼び出されると、extensions.getByName を使用する場合など、テスト スコープ内で明確に表示されます。
tasks {
test {
val map = extensions.getByName("configMap")
println(map)
}
}
次の出力が得られます。
...
> Configure project :
com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac
しかし、コンパイル時にその型を取得またはアサートする方法はなく、結局役に立たなくなります (リフレクションが使用されない限り、これは kotlin DSL の設計哲学に反します)。kotlin dsl が同じことを達成する簡単な方法はありますか?