В документации DSL для ExtraPropertiesExtension
говорится, что
Расширения дополнительных свойств позволяют добавлять новые свойства к существующим объектам домена ... Все объекты домена ExtensionAware Gradle по своей природе имеютрасширение с именем «ext» этого типа.
Интерфейс Gradle
не расширяет ни ExtensionAware
, ни ExtraPropertiesExtension
интерфейсы. Он расширяет только интерфейс PluginAware
, который не расширяет другие интерфейсы.
Но независимо от этого объект Gradle (доступ к которому осуществляется через свойство project.gradle
в сценарии сборки) поддерживает дополнительные свойства,
Итак, как следующий фрагмент кода, записанный в файле build.gradle
, работает без ошибок?
project.gradle.ext["hows.this.possible"] = "This is indeed possible"
logger.info(">>> Project has this property: ${project.hasProperty('hows.this.possible')}")
logger.info(">>> Gradle supports Extra Properties: ${project.gradle.hasProperty('hows.this.possible')}")
logger.info(">>> Gradle Extra Property value: ${project.gradle['hows.this.possible']}")
Это наблюдаемый результат:
>>> Project has this property: false
>>> Gradle supports Extra Properties: true
>>> Gradle Extra Property value: This is indeed possible
PS: Я также проверил, сохраняются ли дополнительные свойства с объектом project
, так как эти команды выполняются на этапе настройки [строка 2 фрагмента кода]. (что, я знаю, не имеет особого смысла, так как экземпляр gradle
создается на этапе инициализации, а экземпляр project
создается на этапе настройки).