#gradle #gradle-plugin
#gradle #gradle-плагин
Вопрос:
Я создаю пользовательский плагин gradle в gradle 5.4. У меня есть расширение:
public class ExternalResourcesPluginExtension {
public final Property<Boolean> update;
public ExternalResourcesPluginExtension(final Project project) {
this.project = project;
update = project.getObjects().property(Boolean.class).convention(false);
}
}
Которое я применяю к плагину:
final ExternalResourcesPluginExtension extension = project.getExtensions()
.create(EXTENSION_NAME, ExternalResourcesPluginExtension.class, project);
Но затем, когда я пытаюсь присвоить ему значение, как во всех примерах:
externalResources {
update = false
}
Затем происходит сбой с:
Не удается привести объект ‘false’ к классу ‘java.lang.Логическое значение’ для класса ‘org.gradle.api.provider.Свойство’
Если я изменю его на:
externalResources {
update.set(false)
}
Тогда это работает нормально.
Что происходит? Почему я не могу присвоить своему свойству, как в примерах?
Комментарии:
1. У вас есть объявление
update
поля с типомProperty<Boolean>
(а не логическое значение напрямую) , поэтому вы не можете присвоить логическое значение этому полю directry (исключение приведения класса) : вам нужно использовать методы, предоставляемыеProperty
интерфейсом (см. docs.gradle.org/current/javadoc/org/gradle/api/provider /… ) , напримерupdate.set(false)
2. не могли бы вы предоставить ссылку на примеры из документов Gradle, где значение присваивается
Property
без использования выделенного метода установки?3. @M.Ricciuti Смотрите Отложенную конфигурацию , где указано «Обратите внимание, что оператор присваивания может использоваться вместо вызова Property.set()».
4. Хорошо, я пропустил этот момент в документации, но см. Примечание в конце этой главы «Отложенная конфигурация»:
Note that Gradle Groovy DSL will generate setter methods for each Property-typed property in a task implementation. These setter methods allow you to configure the property using the assignment (=) operator as a convenience.
=> похоже, что использование присваивания = operator доступно только в реализации задачи. Я предполагаю, что эти удобные методы настройки не создаются для реализации расширения.5. @M.Ricciuti Верно, значит, я предполагаю, что документация неверна? Второй пример настраивается
greeting
дляmessages
расширения. Если вы сделаете свой комментарий ответом, я приму его.