Я пытаюсь написать свой собственный плагин 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)
Это работает нормально, но это довольно уродливый стиль конфигурации, не совсем в стиле типичного DSL градации.
Как я могу изменить свой плагин конфигурации DSL, чтобы быть что-то вроде этого:
teregrin {
terraformVersion = '0.6.6'
roots {
dev {
accessKey = "flobble"
}
prd {
}
}
}
Относительно редактирования: Это часть, где я не понимаю, как использовать Project.container. Я хочу, чтобы элемент «roots» находился внутри элемента «teregrin». Или, действительно, даже лучше, в вашей DSL, как бы я работал с не повторяющимися группами, такими как «terraformVersion»? – Shorn
Ahhhh - Я понял. Это был «project.whatever.extensions.conf = ...», который я не понял. Спасибо. – Shorn