Не удается напечатать правильное значение пользовательского свойства с использованием подхода делегированных свойств для переменной среды в Gradle Kotlin DSL

#android #kotlin #gradle-kotlin-dsl

#Android #kotlin #gradle-kotlin-dsl

Вопрос:

Исходная проблема: https://github.com/gradle/gradle/issues/14253

В настоящее время (как указано в выпуске github) я не могу получить пользовательское свойство через делегированное свойство ( by property )

Рассмотрим этот начальный фрагмент кода:

 // app/build.gradle.kts
val foo: String? by project
val outputEnvirontmentVariable by tasks.registering(Task::class) {
    println("my foo: $foo")
}
  

Ожидаемое поведение

В разделе Текущее поведение также должно быть print bar при настройке переменной среды

Текущее поведение

При выполнении этой задачи:

 (root-directory)$: gradle outputEnvirontmentVariable
  

Ниже приведены результаты для обоих подходов (системное свойство или переменная среды):

Настройка свойства проекта с помощью переменной среды: ORG_GRADLE_PROJECT_foo=bar

 // env variable inside bash/zsh profile file
ORG_GRADLE_PROJECT_foo=bar
  

Результат:

 my foo: null
  

Настройка свойства проекта с помощью системного свойства: org.gradle.project.foo=bar

Результат:

 my foo: bar
  

Контекст

Либо я что-то упустил, либо моя реализация неверна, пожалуйста, cmiiw ~

Ответ №1:

Я закрываю проблему на github из-за неправильной реализации. Смотрите ниже правильные способы вызова org.gradle.project или ORG_GRADLE_PROJECT обработки как свойства проекта:

  • system property Подход должен иметь префикс systemProp. перед org.gradle.project.<your-key>
 // gradle.properties
systemProp.org.gradle.project.foo="<your-value>"
  
  • Или для environment variable подхода, который я забыл использовать export , без него ключ-значение не обрабатывается как правильная переменная среды
 // bash/zsh profile
export ORG_GRADLE_PROJECT_foo="<your-value>"
  

Просто вызовите val foo: String? by project для nullable или val foo: String by project для ненулевого значения в вашем build.gradle.kts